三、栈和队列(后进先出表、先进先出表)
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])围成一个圆环。
本文介绍了栈和队列这两种基本数据结构。栈遵循后进先出(LIFO)原则,常用于表达式求值、递归等场景,可用数组或链表实现。队列则遵循先进先出(FIFO)原则,适用于任务调度、缓冲区等,可采用链表或循环数组来创建。栈的主要操作包括测试空栈、获取栈顶元素、压栈、弹栈;队列的操作则涉及测试空队列、获取队首和队尾元素、入队和出队。

被折叠的 条评论
为什么被折叠?



