4 堆栈与队列
4.1 堆栈
堆栈是一组相同数据类型数据的集合,并且拥有后进先出的特性,所有的操作都在堆栈顶端进行。将元素放入堆栈顶端称为压入,将元素从堆栈顶端取出称为弹出。
堆栈的应用包括递归的调用和返回、二叉树和森林的便利操作、调用子程序和从子程序返回、算术表达式的转换和求值、中央处理单元的中断处理以及堆栈计算机等等。
堆栈的基本操作
堆栈的操作 | 说明 |
---|---|
CREATE | 创建一个控堆栈 |
PUSH | 把数据压入堆栈顶端,并返回新堆栈 |
POP | 从堆栈顶端弹出数据,并返回新堆栈 |
EMPTY | 判断堆栈是否为空堆栈,是则返回true,反之为false |
FULL | 判断堆栈是否已满,是为true,否为false |
堆栈类样板的实现
所谓样板,主要是提供”参数化类型“的功能,可将函数或类中通用的类型视为一种参数,当利用样板建立函数或类时,只需将特定的数据类型带入,即可产生该特定类型的函数或类,所以样板的设计概念也被称为”泛型程序设计“,也称”类属编程“。
设计类时,将数据类型以样板参数取代,在使用时再指定数据类型,这个类称为类样板。在程序中,将会根据声明对象时所指定的数据类型,来建立适用该数据类型的类。类样板的声明格式如下所示:
template<class样板形式参数1,class样板形式参数2>>
class 类名称
{
//类内程序块
}
声明好类样板后,就要用类样板来产生对象,对象的产生方式如下所示:
类名称<数据类型>对象名称;
或
类名称<数据类型>对象名称();
4.2 算术表达式的表式法
在程序中,经常需要将变量或常数等操作数,用系统预先定义好的运算符来进行各种算术运算、逻辑运算与关系运算,以求出一个结果。程序中这些操作数和运算符的组合就称为表达式。
根据运算符在表达式中的位置,表达式可分为:
1. 中序法:运算符在两个操作数中间
2. 前序法:运算符在操作数的前面
3. 后序法:运算符在操作数的后面
4.3 队列
队列是一种先进先出的数据结构,和堆栈一样都是一种有序线性表的抽象数据类型。
队列的应用:计算机的模拟、CPU的作业调度、外围设备联机并发处理系统的应用与图遍历的广度优先搜索法等
队列的基本操作
队列的操作 | 说明 |
---|---|
CREATE | 创建控队列 |
ADD | 将新数据加入队列的末尾,返回新队列 |
DELETE | 删除队列前端的数据,返回新队列 |
FRONT | 返回队列前段的值 |
EMPTY | 若队列为空集合,返回true,否则返回false |
环形队列
所谓环形队列,其实就是一种环形结构的队列,它仍是
Q(0:n−1)
的一位数组,同时
Q(0)
为
Q(n−1)
的下一个元素,这就可以解决无法判断队列是否已出的问题。指针front永远以逆时针方向指向队列中第一个元素的前一个位置,rear则指向队列当前的最后位置。
双向队列
所谓双向队列为一有序性表,加入与删除可在队列的任意一端进行。
优先队列
优先队列为一种不必遵守队列特性的有序线性表,其中的每一个元素都赋予一个优先级,加入元素时可任意加入,但有最高优先级者则最先输出。