您的位置:首页 > 其它

栈模拟队列、队列模拟栈

2016-01-06 18:04 330 查看
为实现简便,假设栈不会溢出.

1.两个栈模拟队列



s1负责入队,s2负责出队.

入队时:直接压入s1

出队时:判断s2是否有元素,若有则弹出,若没有,则将s1倒入s2,再将s2栈顶弹出。若s1、s2均为空,则队列为空。

#include <iostream>
#include <queue>
#include <stack>

using namespace std;

//栈模拟队列
void enqueue(stack<int> *s1, stack<int> *s2, int k){
s1->push(k);
}
int dequeue(stack<int> *s1, stack<int> *s2){
int ians = -1;
if (s2->empty())
{
while (!s1->empty())
{
ians = s1->top();
s1->pop();
s2->push(ians);
}
}
if (s2->empty()){
cout << "empty" << endl;
}
ians = s2->top();
s2->pop();
return ians;
}

int _tmain(int argc, _tchar* argv[])
{
stack<int> s1;
stack<int> s2;
enqueue(&s1, &s2, 1);
cout << dequeue(&s1, &s2) << endl;
enqueue(&s1, &s2, 3);
enqueue(&s1, &s2, 2);
enqueue(&s1, &s2, 1);
cout << dequeue(&s1, &s2) << endl;
enqueue(&s1, &s2, 2);
cout << dequeue(&s1, &s2) << endl;
enqueue(&s1, &s2, 3);
cout << dequeue(&s1, &s2) << endl;
cout << dequeue(&s1, &s2) << endl;
cout << dequeue(&s1, &s2) << endl;
system("pause");
return 0;
}
2.两个队列模拟栈
入栈:直接进入q1






出栈:把q1转入q2,当队长为1时,出队,再将q2退回q1,恢复顺序





#include <iostream>
#include <queue>
#include <stack>

using namespace std;

//队列模拟栈
void Push(queue<int> *q1, queue<int> *q2, int k){
q1->push(k);
}

int Pop(queue<int> *q1, queue<int> *q2){
int iAns = -1;
if (q1->empty()){
cout << "Empty" << endl;
}
else
{
while (q1->size() != 1)
{
iAns = q1->front();
q1->pop();
q2->push(iAns);
}
iAns = q1->front();
q1->pop();
while (!q2->empty())
{
q1->push(q2->front());
q2->pop();
}
}
return iAns;
}
int _tmain(int argc, _TCHAR* argv[])
{

queue<int> q1;
queue<int> q2;

Push(&q1, &q2, 1);
Push(&q1, &q2, 2);
cout << Pop(&q1, &q2) << endl;
Push(&q1, &q2, 3);
cout << Pop(&q1, &q2) << endl;
cout << Pop(&q1, &q2) << endl;
Push(&q1, &q2, 4);
cout << Pop(&q1, &q2) << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  队列