实验三 链栈
来源:互联网 发布:淘宝童装店转让 编辑:程序博客网 时间:2024/06/08 13:16
算法
链栈通常用单链表表示,其结点结构与单链表的结点结构相同,以单链表的头部作为栈顶;
结点结构:设置了一个数据域data和一个结点指针next;
构造函数:初始化一个空栈,将栈顶指针top置为空;
析构函数:当top不为空时,设置了一个结点指针q暂存被释放的结点,top指向被释放结点的下一个结点,删除q;
入栈:申请一个数据域为x的结点s,将结点s插在栈顶;
出栈:如果栈为空,抛出下溢;否则,设置一个结点指针p暂存栈顶元素,top指针后移,将栈顶结点摘链;
取栈顶元素:如果栈不为空,返回top指向的结点的数据域;
判空:如果top为成立,则返回1,否则,返回0;
输出:如果设置一个结点指针p,当p不为空时,输出该栈的所有元素。
四、源代码
#includeusing namespace std;template struct node{T data;node *next;};template class linkstack{public:linkstack(){top=NULL;}~linkstack();void push(T x);T pop();T gettop(){if(top!=NULL)return top->data;}int empty(){if(top==NULL) return 1;else return 0;}void print();private:node *top;};template linkstack ::~linkstack(){while(top!=NULL){node *q;q=top;top=top->next;delete q;}}template void linkstack ::push(T x){node *s;s=new node ;s->data=x;s->next=top;top=s;}template T linkstack ::pop(){node *p;T x;if(top==NULL)throw"error";x=top->data;p=top;top=top->next;delete p;return x;}template void linkstack ::print(){node *p;p=top;while(p!=NULL){cout< data<<" ";p=p->next;}}void main(){cout<<"[1]入栈 [2]出栈 [3]输出 [4]取头 [5]判空 [6]退出"< l;while(flag==1){cout<<"please input the command(1~4):"< >t;switch(t){case 1:cout<<"please enter the element to be pushed in:";while(x!=0){cin>>x;if(x!=0)l.push(x);}cout<
五、运行结果
运行程序,输入1,将2 4 6 8 1 3 5 7 9 依次入栈,当输入0时,停止入栈;
输入2,出栈元素为9;
输入3,输出所有栈元素;
输入4,此时取栈顶元素7;
输入5,判断栈是否为空,非空,返回0;
输入6,退出。
阅读全文
0 0
- 实验三 链栈
- 实验三、链栈
- 实验三 链栈(c++)
- 实验三 端口扫描实验
- 实验三:模块化实验
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 实验三
- 日语一级语法1
- C语言中的前置++和后置++的区别
- nodejs实现简单的表单请求
- Netty源码分析:PoolSubpage
- sort函数对于结构体的二级排序
- 实验三 链栈
- 原生JS与jQuery文档加载完毕的写法
- 自写的第一个javascript组件滚动加载ScrollLoad开发过程
- 重启服务器图片不清除
- 【深度学习】CentOS 7 安装GPU版Tensorflow教程(二)
- Mysql基本常用命令整理
- 日语一级语法2
- Java——多线程总结
- 使用Hive来访问HBase