用双栈实现队列
一、思路
一個棧的入棧操作當做入隊操作,另外一個棧的出棧操作當做出隊操作。
因為入棧的順序與出棧的順序剛好相反,所以我們需要將當做入隊的那個棧中所有的元素全部出棧到另外一個棧,并且在向另一個棧入棧的時候需要先判斷其是不是空棧,否則會引起順序混亂。
二、偽代碼實現
Push(S,x); //元素x入棧
Pop(S,x); //S出棧并將出棧的值賦給x
StackEmpty(S); //判斷棧是否為空
StackOverflow(S); //判斷棧是否為滿
Enqueue; //將元素x入隊
Dequeue; //出隊,并將出隊元素存儲在x中
QueueEmpty; //判斷隊列是否為空
入隊算法
int EnQueue(Stack &S1, Stack &S2, ElemType e) {if (!StackOverflow(S1)){Push(S1, e);return 1;}if (StackOverflow(S1) && !StackEmpty(S2)){printf("full");return 0;}if (StackOverflow(S1) && StackEmpty(S2)){while (!StackEmpty(S1)){Pop(S1, x);Push(S2, x);}}Push(S1, e);return 1; }出隊算法
void DeQueue(Stack &S1, Stack &S2, ElemType &x) {if (!StackEmpty(S2)){Pop(S2,x);}else if(StackEmpty(S1)){printf("empty");}else{while(!StackEmpty(S1)){Pop(S1,x);Push(S2,x);}Pop(S2,x);} }判空算法
int QueueEmpty(Stack &S1, Stack &S2) {if(StackEmpty(S1)&&StackEmpty(S2)){return 1;}else{return 0;} }總結
- 上一篇: 怎么更改win7登录界面 梦幻桌面动态效
- 下一篇: 寻找黄金眼3d排列软件