栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

链式栈的基本操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

链式栈的基本操作

相关代码:

#include"stdio.h"
#include"stdlib.h"

//定义一个链栈的结构体 
//这个链式表有点特殊,它的最大长度是无限大 
typedef struct stack {
    int data;
    struct stack *next;
}Stack;

//定义一个判断栈是否为空的方法
int IsEmpty(Stack *top){
    if(top->next==NULL){
        return 1;
    }
    else{
        return 0;
    }

//定义一个初始化链栈的方法
void Init(Stack *top){
    top=(Stack*)malloc(sizeof(stack));   //定义一个带有头指针top的空栈 
    top->next=NULL;

//定义一个进栈的方法 
void Push(Stack *top,int x){
    //定义一个新的节点
    Stack *s=(Stack *)malloc(sizeof(stack)); 
    //先给新的节点赋值,然后再赋地址 
    s->data=x;
    //给新的节点赋地址,这里运用到了头插法,但是我感觉这种写法不是特别的好,不符合栈的特性,没有把top看成节点。 
    s->next = top->next;   //第一个节点放入到栈底 
     top->next=s;
     printf("进栈成功!n");

//定义一个出栈的方法
void Pop(Stack *top){
    Stack *s;   //表示的是辅助指针 
    s=(Stack *)malloc(sizeof(Stack)); 
    if(IsEmpty(top)==1){
        printf("栈中没有元素,无法进行出栈操作!n");
    }
    else{
        s=top->next;
        top->next = s->next;  //删除s节点
        free(s);   //清除s节点的内存 
        printf("出栈成功");
    }

//定义一个取出栈顶元素的方法
void GetTop(Stack *top){
    if(IsEmpty(top)==1){
        printf("栈中没有元素,无法进行取出栈顶元素操作!n");    
    }
    else{
        printf("栈顶元素为:%dn",top->next->data);
    }

//定义一个输出链式栈中所有元素的方法。 
void show(Stack *top){
    Stack *p=top->next;
    while(p){
        printf("%d-",p->data);
        p=p->next;
    }

int main(){
    Stack top;  //定义一个带有top头结点的空栈 
    Init(&top);        //将其初始化 
    //进行进栈操作
    Push(&top,0);
    Push(&top,1);
    Push(&top,2);
    GetTop(&top);
    show(&top);
     
}

相关结果:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330332.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号