使用栈实现的队列 - STEMHA's Blog

使用栈实现的队列

算法思想

  • 其中一个栈A作为队列的入口,用于插入新元素;另一个栈B作为队列的出口,用于移除老元素。
  • 当B为空的时候需要及时将A中的数据转移进去。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<iostream>
#include<stack>
using namespace std;
/* stack<int>q;
q.push(1); //入栈
q.pop(); //出栈
q.top(); //返回栈顶成员
q.size(); //返回栈成员个数
q.empty(); //判断是否为空栈
*/

class stackqueue
{
private:
stack<int> stacka;
stack<int> stackb;

public:
void enqueue(int a);
int dequeue();
void transfer();
};

int stackqueue::dequeue(){
if(!stackb.empty())
{
int tmp = stackb.top();
stackb.pop();
return tmp;
}
else
{
if(stacka.empty())
{
return NULL;
}
transfer();
int tmp = stackb.top();
stackb.pop();
return tmp;
}

}

void stackqueue::transfer(){
while(!stacka.empty())
{
stackb.push(stacka.top());
stacka.pop();
}
}
void stackqueue::enqueue(int a){
stacka.push(a);
}

int main()
{
stackqueue *que = new stackqueue();
que->enqueue(1);
que->enqueue(2);
que->enqueue(3);
cout << que->dequeue() << endl;
cout << que->dequeue() << endl;
que->enqueue(4);
cout << que->dequeue() << endl;
cout << que->dequeue() << endl;
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×