利用兩個棧S1,S2來模擬乙個佇列

2021-10-24 01:13:25 字數 1243 閱讀 4039

利用兩個棧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...