您的位置:首页 > 理论基础 > 数据结构算法

《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——队列

2014-06-14 21:32 176 查看
2014.06.14 21:04

简介:

  队列作为先进先出(FIFO)思想的代表,是最基础的数据结构之一,最典型的应用,就是广度优先搜索。实现方式可以用一条单链表或者两个栈,其中前者更为靠谱,原因请自行分析。

图示:

  下图为单链表实现队列的思路。链表的头尾位置分别被记录,因此很容易实现尾进头出的操作。

  


  另一种思路是用两个栈实现一个队列,主要思路就是颠来倒去,两个栈的先进先出叠加起来,成为了先进后出。我下面的代码居然是这种方案的,看来当时直接拿了自己之前写过的代码偷懒,于是就没实现链表版的队列。用两个栈来实现队列,貌似也是一道烂大街的面试题,所以学会这个思路还是很有必要的。

  


实现:

// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: