《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——队列
2014-06-14 21:32
183 查看
2014.06.14 21:04
简介:
队列作为先进先出(FIFO)思想的代表,是最基础的数据结构之一,最典型的应用,就是广度优先搜索。实现方式可以用一条单链表或者两个栈,其中前者更为靠谱,原因请自行分析。
图示:
下图为单链表实现队列的思路。链表的头尾位置分别被记录,因此很容易实现尾进头出的操作。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/7ea5d98992bea6fd93bdc2272a26a007.png)
另一种思路是用两个栈实现一个队列,主要思路就是颠来倒去,两个栈的先进先出叠加起来,成为了先进后出。我下面的代码居然是这种方案的,看来当时直接拿了自己之前写过的代码偷懒,于是就没实现链表版的队列。用两个栈来实现队列,貌似也是一道烂大街的面试题,所以学会这个思路还是很有必要的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/6cd67c099ed2f4e332ccbb316ef211ff.png)
实现:
简介:
队列作为先进先出(FIFO)思想的代表,是最基础的数据结构之一,最典型的应用,就是广度优先搜索。实现方式可以用一条单链表或者两个栈,其中前者更为靠谱,原因请自行分析。
图示:
下图为单链表实现队列的思路。链表的头尾位置分别被记录,因此很容易实现尾进头出的操作。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/7ea5d98992bea6fd93bdc2272a26a007.png)
另一种思路是用两个栈实现一个队列,主要思路就是颠来倒去,两个栈的先进先出叠加起来,成为了先进后出。我下面的代码居然是这种方案的,看来当时直接拿了自己之前写过的代码偷懒,于是就没实现链表版的队列。用两个栈来实现队列,貌似也是一道烂大街的面试题,所以学会这个思路还是很有必要的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/01/6cd67c099ed2f4e332ccbb316ef211ff.png)
实现:
// My implementation of queue with two stacks. #include <stack> using namespace std; class Queue { public: Queue() {} void push(int val) { s1.push(val); } void pop() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } s2.pop(); } int size() { return s1.size() + s2.size(); } bool empty() { return size() == 0; } int front() { if (s2.empty()) { while (!s1.empty()) { s2.push(s1.top()); s1.pop(); } } return s2.top(); } int back() { if (s1.empty()) { while (!s2.empty()) { s1.push(s2.top()); s2.pop(); } } return s1.top(); } ~Queue() { while (!s1.empty()) { s1.pop(); } while (!s2.empty()) { s2.pop(); } } private: stack<int> s1, s2; }; int main() { return 0; }
相关文章推荐
- 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——双向链表
- 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——单向链表
- 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——栈
- 【郝斌数据结构自学笔记】57-59_递归8 _ 汉诺塔_1线性结构总复习 2线性结构和非线性结构关系 3栈队列链表数组之间的关系【重点】
- 数据结构复习——第三章:栈和队列
- 《数据结构》复习之线性表(栈和队列)
- 线性代数复习 第三章 向量
- 线性表之--队列操作
- 特殊线性表(二)队列
- 数据结构复习-基础、线性表、栈、队列、串
- oracle第三章复习
- 线性结构--->循环队列的链式储存实现
- 线性代数复习之一:向量组与矩阵
- 《数据结构》第三章 栈和队列 实验
- 数据结构复习——线性表的链式存储实现(单向链表)
- 【noip2017 day2T2】【蚯蚓】巧用队列单调性线性处理
- 数据结构之线性队列
- 第三章 栈和队列 知识导图
- 第三章 栈和队列思维导图
- [150422][C++]数据结构复习——队列实现源码