c++使用顺序结构实现栈

来源:互联网 发布:微分方程数值算法 编辑:程序博客网 时间:2024/06/05 11:49

        关于栈的介绍在此不用多说了,想必在看这个页面的人都已经对栈有了基本的了解了,更多就麻烦大家自己百度吧,实现用两种,一种是顺序结构,有大小限制;另外一种就是链式结构没有大小限制,用链表实现。这里贴出c++的实现栈代码:

#include <iostream>#include <string>#include <cstdlib>using namespace std;struct Stack{int size;//栈容量int *base;//栈底指针int *top;//栈顶指针};bool init_stack(Stack &s){cout << "input the size of the stack: ";cin >> s.size;//栈容量初始化时有人输入s.base = new int[s.size];//申请内存空间if(s.base == NULL)return false;//如果内存申请失败者返回falses.top = s.base;//初始化化空栈}int get_top(Stack &s)//获取栈顶元素{if (s.base == s.top)exit(1);//如果为空栈,则宣告失败退出int value = *(s.top - 1);//栈顶指针总是在实际元素上面的一个位置,所有减一return value;}bool push(Stack &s, int n)//插入元素{if (s.top - s.base > s.size - 1)//如果超出栈容量{cout << "Error! stack overflow" << endl;//显示内存溢出并退出return false;}*s.top = n;//插入元素s.top++;//指针上移cout << n << " has been pushed into" << endl;return true;//返回状态}int pop(Stack &s)//删除元素{if (s.base == s.top){cout << "this stack has no elements to pop" << endl;//如果为空栈,返回falsereturn false;}s.top--;//顶端指针下移cout << *s.top << " has been poped" << endl;//显示信息return *s.top;//返回删除元素,本例中没有用到返回值}void traversal(Stack &s)//遍历栈{if (s.base == s.top){cout << "this stack has no elements to show" << endl;exit(1);//如果栈为空则直接退出}int *tmp = s.top;//定义tmp为临时指针,防止栈顶指针在使用中被修改while (tmp != s.base){cout << *(--tmp) << endl;//输入元素值}} //主函数不做注释了///int main(int argc, char const *argv[]){Stack s;init_stack(s);string operation;int value;cout << "input your operation" << endl;while (cin >> operation){if (operation == "push"){cin >> value;push(s, value);}if (operation == "pop")pop(s);if (operation == "get_top")cout << get_top(s) << endl;if (operation == "traversal")traversal(s);}return 0;}


0 0
原创粉丝点击