栈和队列的操作是线性表操作的子集。它们是操作受限的线性表。
从数据结构的角度看,是限定性的数据结构。
从数据类型的角度看,是和线性表大不相同的两类重要的抽象数据类型。
3.1 栈
栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。
表尾称为栈顶(Top)。
表头称为栈底(bottom)。
栈S=(a1, a2, a3, …an,),a1称为栈底元素,an为栈顶元素。栈中元素按a1、a2、…an的依次进栈。
退栈的元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。栈又称为后进先出(LIFO)线性表。
栈的操作:栈顶进行插入或删除,栈的初始化、判空、取栈顶元素;
栈也有两种存储表示方法:顺序栈、链栈;
3.2 栈的应用举例
3.3 栈与递归实现
Hanoi塔
3.4 队列
先进先出的线性表结构;只允许在表的一端进行插入,而在另一端删除元素;
队尾、队头;
Queue
队列有两种存储表示:
链表表示的队列叫链队列;
循环队列;
3.5 离散事件模拟
银行排队问题,计算一天中客户在银行逗留的平均时间,模拟银行的业务活动。
客户到达和离开银行的这两个时刻发生的事情称为“事件”。整个模拟程序将按照事件发生的先后顺序进行处理。这样一种模拟程序称为事件驱动模拟。