数据结构与算法——栈的实现方式
栈的物理实现有 顺序栈 和 链式栈 一、顺序栈(Array-based Stack) 使用向量实现,本质上是顺序表的简化版 栈有固定大小 关键是确定哪一端作为栈顶 注意上溢、下溢问题 类定义: template <class T> class arrStack : public Stack <T> { private: // 栈的顺序存储 int mSize; // 栈中最多可存放的元素个数 int top; // 栈顶位置,应小于mSize T *st; // 存放栈元素的数组 public: // 栈的运算的顺序实现 arrStack(int size) { // 创建一个给定长度的顺序栈实例 mSize = size; top = -1; st = new T[mSize]; } arrStack() { // 创建一个顺序栈的实例 top = -1; } ~arrStack() { delete [] st; } void clear() { top = -1; } // 清空栈 }; bool arrStack<T>::push(const T item) { // 入栈 if (top == mSize-1) { // 栈已满 cout << "栈满溢出" << endl; return false; } else { // 新元素入栈并修改栈顶指针 st[++top] = item; return true; } } bool arrStack<T>::pop(T& item) { // 出栈 if (top == -1) { // 栈为空 cout << "栈为空,不能执行出栈操作"<< endl; return false; } else { item = st[top--]; // 返回栈顶,并缩减1 return true; } } 二、链式栈(Linked Stack) 用单链表方式存储,其中指针的方向是从栈顶向下链接 理论上没有大小限制 类定义:...