利用兩個棧s1,s2來模擬乙個佇列,已知棧的4個運算定義如下:
push(s,x);//元素x入棧
pop(s,x) ;//s出棧並將出棧的值賦給x
stackempty(s) ;//判斷棧是否為空
stackoverflow(s) ;// 判斷棧是否滿
如何利用棧的運算來實現該佇列的3個運算(形參根據要求自己設計)?
enqueue ;//將元素x入隊
dequeue ;//出隊,並將出隊元素儲存在x中
queueempty;/ /判斷佇列是否為空
分析:
利用兩個棧s1和s2來模擬乙個佇列,當需要向佇列中插入乙個元素時
用s1來存放已輸入的元素,即s1執行入隊操作。當需要出隊時,則隊s2執行
出棧操作。必須先將s1中所有元素出棧併入棧到s2中,再在s2**棧
即可實現出隊操作,而在執行此操作之前必須判斷s2是否為空,否則導致順序混亂
當棧s1和s2都為空時隊列為空。
即:①對s2的出棧操作用作出隊,若s2為空則先將s1中所有元素送入s2
②對s1的入棧操作用作入隊,若s1滿,必須先保證s2為空,才能將s1中
的元素全部插入s2中
(1)出隊演算法
//入隊演算法
intenq
(stack &s1,stack &s2,elemtype e)if(
stackoverflow
(s1)&&!
stackempty
(s2))if
(stackoverflow
(s1)
&&stackempty
(s2)
)push
(s1,e)
;return1;
}}
(2)入隊演算法
//出隊演算法
void
dequeue
(stack &s1,stack &s2,elemtype &x)
elseif(
!stackempty
(s1)
)else
pop(s2,x);}
}
(3)判斷隊列為空演算法
int
queueempty
(stack s1,stack s2)
else
return0;
}
兩個棧模擬乙個佇列 兩個佇列模擬乙個棧
解題思路 插入操作在stack1中進行,刪除操作在stack2中進行,如果stack2為空,則將stack1中的所有元素轉移到stack2中。include include includeusing namespace std template class cqueue 建構函式 template ...
兩個棧實現乙個隊。
思路 入隊 只將棧s1作為入隊。出隊 將棧s2作為出隊,如果棧s1不為空,s2為空,出隊時將s1的元素倒入s2中,再pop 否則s2不為空,出隊時直接在棧s2中pop include include includeusing namespace std templateclass queue voi...
兩個棧模擬乙個佇列
兩個棧模擬乙個佇列,1號棧為入隊,棧頂表示隊尾 2號棧為出隊,棧頂表示隊首。入隊,直接進1號棧 出隊,先判斷2號棧是否有元素,有元素就直接彈出棧頂即隊首,如果2號棧沒有元素,則將1號棧的元素順序彈出並進2號棧。cpp view plain copy include include include u...