数据结构学习之路6 用链表实现堆栈
来源:互联网 发布:淘宝卖家手册pdf 编辑:程序博客网 时间:2024/06/03 15:47
这次代码一波两折,本来想着堆栈这种结构只有一端进行操作,这样我只记录rear的位置就好了,就不用像链表实现的队列内样定义两个结构体,然后我就一路写,push函数直接使p指向队尾就好,结果写到pop的时候就傻眼了,我找不到上一个节点!我的指针指向着最后一个节点,那我怎么出栈呢?想了好久,一度想要写出双链表,看了别人的思路之后才发现可以倒着写,大家如果不懂我为什么说是倒着写,可以画一画这个程序的逻辑,真的很巧妙,我自愧不如,能力还需加强
本次代码的变量命名依然狗血,一股不专业的气息扑面而来…内个show函数只是我用来测试函数是否正确的,大家不用在意
接下来贴代码:
#include<iostream>using namespace std;typedef struct Stack *stack;typedef struct Fnode *fnode;struct Stack{int data;stack next;};struct Fnode{stack top;};fnode creat(){fnode p = (fnode)malloc(sizeof(Fnode));p ->top = NULL;return p;}int isEmpty(fnode p){if(p ->top == NULL)return 1;return 0;}void push(int x, fnode p){stack s = (stack)malloc(sizeof(Stack));s ->data = x;s ->next = p ->top;p ->top = s;}int pop(fnode p){if(isEmpty(p)){cout << "堆栈已空" << endl;return NULL;}stack s = p ->top;p ->top = p ->top ->next;int a = s ->data;free(s);return a;}void show(fnode p){if(isEmpty(p)){cout << "堆栈已空" << endl;return;}stack s = p ->top;while(s){cout << s ->data << endl;s = s ->next;}free(s);}void main(){fnode p = creat();push(2, p);push(3, p);push(6, p);show(p);cout << endl;pop(p);show(p);cout << endl;pop(p);show(p);cout << endl;pop(p);show(p);cout << endl;system("pause");}
阅读全文
0 0
- 数据结构学习之路6 用链表实现堆栈
- 数据结构学习之堆栈
- 用链表实现堆栈数据结构
- 数据结构学习之堆栈的链式存储C++实现
- 数据结构学习笔记之堆栈
- 数据结构学习之路3 堆栈的基本操作
- 数据结构学习笔录--堆栈的实现
- 数据结构之堆栈8定义的实现
- 用java实现数据结构之-堆栈
- Java数据结构之堆栈-使用数组实现堆栈
- 数据结构学习之堆栈(顺序存储)
- 数据结构学习之堆栈(链式存储)
- 堆栈数据结构的实现~
- 数据结构--堆栈的实现
- 《C++实现数据结构》:堆栈
- 数据结构-堆栈-数组实现
- 我的JavaforAndroid学习之路-堆栈实现的四则运算
- 数据结构学习-堆栈
- 关于ssm通过ajax来进行数据交互出现的错误:org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'ap
- Keepalived+LVS | Keepalived+Nginx
- RocketMq有3中消息类型
- Java多线程系列8(Atomic)
- Java多线程系列9(CountDownLatch)
- 数据结构学习之路6 用链表实现堆栈
- 抽象工厂模式(Abstract Factory Pattern)
- RocketMQ批量消费、消息重试、消费模式、刷盘方式
- 草根学Python(九) 面向对象
- nodejs socket实现的服务端和客户端简单通信
- Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException:
- 生产者消费者三种并发模式实现方法
- Redis有序集合
- [PAT乙级]1031. 查验身份证(15)