ch3-栈和队列-链栈的入栈与出栈操作 发表于 2019-05-16 | 更新于 2019-06-20 | 分类于 数据结构与算法的上机代码实现 | 阅读次数: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include <stdio.h>#include <stdlib.h>//链表的的的结构体定义typedef struct lineStack{ int data; struct lineStack *next;}lineStack;//入栈函数push,stack为当前的链栈,a表示入栈元素//通常我们将链表的头部作为栈顶,尾部作为栈底,所以采用头插法//stack初始为头结点lineStack *push(lineStack *stack,int a){ //创建存储新元素的结点 lineStack *line=(lineStack*)malloc(sizeof(lineStack)); line->data=a; //创建好的结点,该建立新结点与头结点stack的逻辑关系了 line->next=stack; //更新头指针的指向 stack=line; return stack;//返回头结点}//栈顶元素出链栈的实现函数lineStack *pop(lineStack *stack){ //当栈不空时方可出栈 if(stack){ //声明一个新指针指向栈顶节点 lineStack *p=stack; //更新头指针 stack=stack->next;//stack=p->next; printf("出栈元素:%d\n",p->data);//这里必须是p->data,不能是stack->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;} 结果123456789出栈元素:4新栈顶元素:3出栈元素:3新栈顶元素:2出栈元素:2新栈顶元素:1出栈元素:1栈已空栈内无元素 喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号 呐,请我吃辣条 打赏 微信支付 支付宝