数据结构之栈的顺序存储6-(入栈,出栈等)
2015-09-14 12:01
393 查看
用数组实现基本栈的操作,思路还是挺简单的,代码如下
运行结果如下
需要注意的是开始提供的栈的容量值要大于你实际放入的元素,要不然程序会产生异常!
//当栈顶指针top为0的时候为空栈 top == stacksize时栈满 #include <iostream> #include <cstdlib> using namespace std; template<typename T> class SqStack{ private: T *base = NULL; int top; //栈顶指针 int stacksize; //站容量 public: SqStack(int i); //构造容量为i的空栈 ~SqStack(); void Push(T x); //元素入栈 T Pop(); //元素出栈 T GetTop(); //获取栈顶元素 bool StackEmpty(); //检测栈是否为空 void ClearStack(); //清空栈 int StackLength(); //测定栈长度 void StackTranverse(); //遍历栈中元素 }; //构造容量为i的空栈 template<typename T> SqStack<T>::SqStack(int i) { base = new T[i]; if (!base) throw "内存分配失败 \n"; top = 0; stacksize = i; } //元素入栈 template<typename T> void SqStack<T>::Push(T x) { if (top == stacksize) throw "栈已经满了 \n"; base[top++] = x; } //元素出栈 template<typename T> T SqStack<T>::Pop() { if (top == 0) throw "栈已经空了 \n"; T e = base[--top]; return e; } //获取栈顶元素 template<typename T> T SqStack<T>::GetTop() { return base[top - 1]; } //测定栈长度 template<typename T> int SqStack<T>::StackLength() { return top; } //检测栈是否为空 template<typename T> bool SqStack<T>::StackEmpty() { return StackLength() == 0; } //遍历栈中元素 template<typename T> void SqStack<T>::StackTranverse() { for (int i = 0; i < top; ++i) cout << base[i] << " "; cout << endl; } //清空栈 template<typename T> void SqStack<T>::ClearStack() { top = 0; //栈顶指针记录元素数目 } template<typename T> SqStack<T>::~SqStack() { delete[] base; top = 0; stacksize = 0; } int main() { cout << "请输入你需要的栈容量:"; int i; cin >> i; SqStack<int> s(i); cout << "依次向栈中放入1-5的连续数:"; for (int j = 1; j <= 5; ++j) s.Push(j); cout << "现在栈中的元素为:"; s.StackTranverse(); cout << "现在执行出栈操作:"; cout << "出栈的元素为:" << s.Pop() << endl; cout << "栈的长度为:" << s.StackLength() << endl; if (s.StackEmpty()) cout << "栈为空 \n"; else cout << "栈不为空 \n"; cout << "现在栈中的元素为:"; s.StackTranverse(); cout << "向栈中放入10和11 \n"; s.Push(10); s.Push(11); cout << "现在栈中的元素为:"; s.StackTranverse(); cout << "栈顶元素为:" << s.GetTop() << endl; cout << "现在开始清空栈 \n"; s.ClearStack(); if (s.StackEmpty()) cout << "栈为空 \n"; else cout << "栈不为空 \n"; system("pause"); return 0; }
运行结果如下
需要注意的是开始提供的栈的容量值要大于你实际放入的元素,要不然程序会产生异常!
相关文章推荐
- Flex字符串比较 还有Flex字符串操作
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Lua教程(七):数据结构详解
- ASP Cookies操作的详细介绍与实例代码
- Perl中的列表和数组学习笔记
- perl数据库添加、删除、更新、查询操作例子
- 总结的5个C#字符串操作方法分享
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#交错数组用法实例
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#操作XML文件实例汇总