栈和队列---2链栈

@Adrian

链栈元素入栈

例如,将元素 1、2、3、4 依次入栈,等价于将各元素采用头插法依次添加到链表中,每个数据元素的添加过程如图 2 所示:
在这里插入图片描述

链栈元素出栈

例如,图 2e) 所示的链栈中,若要将元素 3 出栈,根据"先进后出"的原则,要先将元素 4 出栈,也就是从链表中摘除,然后元素 3 才能出栈,整个操作过程如图 3 所示:
在这里插入图片描述

链栈完整代码:

#include <stdio.h>
#include <stdlib.h>

//链表中的结点的结构
typedef struct lineStack{
    int data;
    struct lineStack*next;
}lineStack;

//stack为当前的链栈,a表示入栈元素
lineStack * push(lineStack*stack,int a){
    //创建存储新元素的节点
    lineStack*line=(lineStack*)malloc(sizeof(lineStack));
    line->data=a;
    //新节点与头节点建立逻辑关系
    line->next=stack;
    //更新头指针的指向
    stack=line;
    return stack;
}

//栈顶元素出链栈的实现函数
lineStack*pop(lineStack * stack){
    if(stack){
        //声明一个新指针指向栈顶节点
        lineStack*p=stack;
        //更新头指针
        stack=stack->next;
        printf("出栈元素:%d   ",p->data);
        if(stack){
            printf("新栈顶元素:%d\n",stack->data);
        }else{
            printf("栈已空!\n");
        }
        free(p);
    }else{
        printf("栈内没有元素");
        return stack;
    }
    return stack;
}

int main()
{
   lineStack * stack=NULL;
   stack=push(stack,1);
   stack=push(stack,2);
   stack=push(stack,3);
   stack=push(stack,4);
   stack=pop(stack);
   stack=pop(stack);
   stack=pop(stack);
   stack=pop(stack);
   stack=pop(stack);
    return 0;
}

输出结果

在这里插入图片描述

发布了28 篇原创文章 · 获赞 0 · 访问量 233
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览