单链表实现栈
来源:互联网 发布:淘宝网上买电视可靠吗 编辑:程序博客网 时间:2024/06/08 13:22
编程实现下面的栈顶操作:
- class MyData
- {
- void push(data);
- void pop(&data);
- bool isEmpty();
- };
- #include <iostream>
- using namespace std;
- class MyData
- {
- public:
- MyData() : data(0), next(NULL){} //默认构造函数
- MyData(int value) : data(value), next(NULL){} //带参数的构造函数
- int data; //数据域
- MyData *next; //下一个节点
- };
- class MyStack
- {
- public:
- MyStack() : top(NULL) {} //默认构造函数
- void push(MyData data); //进栈
- void pop(MyData *pData); //出栈
- bool IsEmpty(); //是否为空
- MyData *top; //栈顶
- };
接下来是进栈、出栈以及判空的代码实现,程序代码如下:
- void MyStack::push(MyData data)
- {
- MyData *pData = NULL;
- pData = new MyData(data.data); //生成新节点
- pData->next = top; //与原来的栈顶节点相连
- top = pData; //栈顶节点为新加入的节点
- }
- void MyStack::pop(MyData *data)
- {
- if(IsEmpty()) //判空
- {
- return;
- }
- data->data = top->data; //给传出的参数赋值
- MyData *p = top; //临时保存原栈顶节点
- top = top->next; //移动栈顶,指向下一个节点
- delete p; //释放原栈顶节点内存
- }
- bool MyStack::IsEmpty()
- {
- return (NULL == top); //如果top为空返回1,否则返回0
- }
MyStack::pop 函数表示出栈操作,它实际上就是在单链表的首部进行删除操作,并且top一直指向这个单链表的首部,另外它还把删除节点的数据保存到data参数中。
MyStack::IsEmpty 函数非常简单,当栈空时,top指针为NULL,而当栈中有节点时,top指向链表头,因此只需要用top与NULL进行比较即可。
下面是栈操作的测试代码:
- int main()
- {
- MyData data(0);
- MyStack s;
- s.push(MyData(1)); //进栈
- s.push(MyData(2));
- s.push(MyData(3));
- s.pop(&data); //出栈
- cout<<"pop "<<data.data<<endl;
- s.pop(&data);
- cout<<"pop "<<data.data<<endl;
- s.pop(&data);
- cout<<"pop "<<data.data<<endl;
- cout<<"Empty = "<<s.IsEmpty()<<endl;
- return 0;
- }
执行结果为:
- pop 3
- pop 2
- pop 1
- Empty = 1
- Press any key to continue
0 0
- 单链表实现一个栈
- 单链表实现栈
- 单链表实现栈
- java 单链表实现栈
- 利用单链表实现栈
- 单链表实现栈
- 数据结构栈--单链表实现
- 单链表实现队列 栈
- 数据结构-单链表实现栈
- 面试题----单链表实现栈
- 使用单链表实现链栈
- C语言单链表实现栈
- 实现单链表、栈、队列功能
- 运用单链表实现链栈,并实现括号匹配---作业
- 单链表实现
- 单链表实现
- 单链表实现!
- 单链表实现
- VS2010+Windows7编译Bundler
- c++ exception实例
- xcode ARC forbids explicit message send of 'release'
- myeclipse10配置hiberate
- 面向过程和面向对象的区别
- 单链表实现栈
- 芯片加密技术浅谈
- Android Application-Telephony-RIL 2 PhoneApp
- Fragment(1)
- 《老罗的Android之旅》阅读笔记——Content Provider
- MVC与ASP.NET的区别
- MapReduce Design Patterns(4、分箱、全排序、混洗)(八)
- Android kernel Crash后,定位出错点的方法
- PHP安全设置之PHP.ini