三、栈和队列(后进先出表、先进先出表)
3.1概念
栈:最先进栈的元素会被排到最后,要想对其就行修改,那最后进去的会先进行操作;表首为栈顶,表尾栈底;不含任何元素为空栈。
队列:一种特殊的表,出队列(删除)会从第一个进的开始出,进队列(插入)会排到第一个后面。
栈的运算
类型 | 含义 |
---|---|
StackEmpty(S) | 测试栈S是否为空 |
StackFull(S) | 测试栈S是否已满 |
StackTop(S) | 返回栈S的栈顶元素 |
Push(x,S) | 将元素x入栈 |
Pop(S) | 抛栈(删除栈顶的数并且返回该数) |
队列的运算
类型 | 含义 |
---|---|
QueueEmpty(Q) | 测试队列Q是否是空的 |
QueueFull(Q) | 测试队列Q是否已满 |
QueueFirst(Q) | 返回队列的首元素 |
QueueLast(Q) | 返回队列尾元素 |
EnterQueue(x,Q) | 在队列Q尾插入x元素 |
DeleteQueue(Q) | 删除并返回队列Q的队首元素 |
3.2实现方式
栈:
①、用数组实现栈
把栈元素存到数组里,栈底对应数组的底部。data[0]就是最早进栈的元素。
②、用指针实现栈(链栈)
队列:
①、用指针实现队列:实际上是一个单链表,队列结点类型和单链表的一样。和用指针实现栈正好相反
②、用循环数组实现队列:将数组中的单元(queue[0:maxsize-1])围成一个圆环。