9.10作业
225.用队列实现栈
9.11作业
栈和队列的基础知识
一、栈
- 定义:栈是一种特殊的线性表,它只能在一端进行插入和删除操作,这一端被称为栈顶(top),另一端则被称为栈底(bottom)。
- 特点:后进先出(Last In First Out,LIFO):最后进入栈的元素最先被弹出。
- 基本操作:入栈(Push):将元素添加到栈顶。出栈(Pop):移除并返回栈顶元素。查看栈顶元素(Peek):返回栈顶元素,但不移除它。判断栈是否为空(IsEmpty):如果栈中没有元素,则返回 true,否则返回 false。
- 存储结构:
顺序栈:使用数组来实现栈,通过一个变量来记录栈顶元素的位置。链式栈:通过链表来实现栈,每个节点包含数据域和指向下一个节点的指针,栈顶指针指向链表的头部。
5.应用场景:
函数调用栈:在程序执行过程中,当一个函数调用另一个函数时,当前函数的执行状态会被保存到栈中,当被调用函数执行完毕后,再从栈中恢复原来函数的执行状态。
表达式求值:例如将中缀表达式转换为后缀表达式,以及对后缀表达式求值的过程中都可以利用栈来实现。
括号匹配:检查表达式中的括号是否匹配,如在编程中检查代码中的括号是否正确配对。
二、队列
- 定义:队列也是一种线性表,它允许在一端进行插入操作(队尾,rear),在另一端进行删除操作(队头,front)。
- 特点:先进先出(First In First Out,FIFO):最先进入队列的元素最先被取出。
- 基本操作:
入队(Enqueue):将元素添加到队尾。
出队(Dequeue):移除并返回队头元素。
查看队头元素(Peek):返回队头元素,但不移除它。
判断队列是否为空(IsEmpty):如果队列中没有元素,则返回 true,否则返回 false。
4.存储结构:
顺序队列:使用数组实现,需要两个指针分别指向队头和队尾。但顺序队列可能会出现假溢出的情况,为解决此问题可以采用循环队列。
链式队列:通过链表实现,包含一个头指针和一个尾指针,分别指向链表的头节点和尾节点。
5.应用场景:
广度优先搜索(BFS)算法:在图的遍历中,BFS 使用队列来存储待访问的节点。
打印机缓冲:当多个文档需要打印时,它们会按照提交的先后顺序在队列中排队等待打印。 操作系统中的进程调度:按照进程到达的先后顺序进行调度执行。
1047.删除字符串中的所有相邻重复项
150.逆波兰表达式求值