链式栈的基本操作

相关代码:

#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("栈顶元素为:%d\n",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);
     
}

相关结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值