栈(Stack)
1. 栈的概念
1.1 栈的定义
- 栈是一种特殊的线性表,是一种运算受限的线性表。
- 栈是后进先出(LIFO,Last In First Out)的线性表。
1.2 栈的逻辑结构和存储表示
- 栈的逻辑结构和线性表相同。
- 栈的抽象数据类型有两种典型的存储表示:基于数组的存储表示和基于链表的存储表示。
(1)基于数组的存储表示实现的栈称为顺序栈,顺序栈可以采用顺序表作为其存储表示,因此,可以在顺序栈的声明中用顺序表定义它的存储空间。
(2)基于链表的存储表示实现的栈称为链式栈,链式栈可以采用单链表作为其存储表示,因此,可以在链式栈的声明中用单链表定义它的存储空间。
1.3 栈的运算规则
- 栈中没有任何元素时则成为空栈。
- 栈可定义为只允许在表的末端进行插入和删除的线性表。允许插入和删除的一端叫栈顶(top),而不允许插入和删除的另一端叫栈底(bottom)。
- 向一个栈插入新元素称为进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。
- 从一个栈删除元素称为出栈或退栈,它是把栈顶元素删除,使其下一个元素成为新的栈顶元素。
- 设定栈S=( a1,a2,……,an ),称最后加入栈中的元素 an 为栈顶。栈中元素按 a1,a2,……,an 的顺序进栈。而退栈的顺序相反, an 先退栈,然后到 an−1 退栈,最后到 a1 退栈。
- 栈的模型:
2. 栈的抽象类定义——应用了模板类来描述栈抽象数据类型
文件:Stack.h
#ifndef STACK_H_ #define STACK_H_ template <class T> class Stack { public: Stack(){} //构造函数 virtual ~Stack(){} //析构函数 public: virtual void Push(const T& x) = 0; //新元素x进栈 virtual bool Pop(T& x) = 0; //栈顶元素出栈,并将该元素的值保存至x virtual bool getTop(T& x) const = 0; //读取栈顶元素,并将该元素的值保存至x virtual bool IsEmpty() const = 0; //判断栈是否为空 virtual bool IsFull() const = 0; //判断栈是否为满 virtual int getSize() const = 0; //计算栈中元素个数 virtual void MakeEmpty() = 0; //清空栈的内容 }; #endif /* STACK_H_ */
参考文献:
[1]《数据结构(用面向对象方法与C++语言描述)(第2版)》殷人昆——第三章
[2]《C/C++常用算法手册》秦姣华、向旭宇——第二章
[3] 百度搜索关键字:栈