3 8 堆疊模擬佇列 25 分

2021-10-19 15:41:17 字數 1346 閱讀 5730

設已知有兩個堆疊s1和s2,請用這兩個堆疊模擬出乙個佇列q。

所謂用堆疊模擬佇列,實際上就是通過呼叫堆疊的下列操作函式:

int isfull(stack s) :判斷堆疊s是否已滿,返回1或0;

int isempty (stack s ):判斷堆疊s是否為空,返回1或0;

void push(stack s, elementtype item ) :將元素item壓入堆疊s;

elementtype pop(stack s ) :刪除並返回s的棧頂元素。

實現佇列的操作,即入隊void addq(elementtype item)和出隊elementtype deleteq()。

輸入格式:

輸入首先給出兩個正整數n1和n2,表示堆疊s1和s2的最大容量。隨後給出一系列的佇列操作:a item表示將item入列(這裡假設item為整型數字);d表示出隊操作;t表示輸入結束。

輸出格式:

對輸入中的每個d操作,輸出相應出隊的數字,或者錯誤資訊error:empty。如果入隊操作無法執行,也需要輸出error:full。每個輸出佔1行。

題目思路:

1.不用真的去實現題目中說的那麼多函式的功能,可以採用兩個整形陣列模擬一下即可。

2.想要達到佇列先進先出的效果,那麼一定是讓資料在入棧以後,在另乙個棧中「翻個身」,也就是說讓小的棧作為輸入棧,大的棧作為輸出棧(因為小的棧夠短,能夠在大的棧中「翻身」)。

3.隊空條件,兩個棧(陣列)都為空。

4.棧滿條件,輸入棧滿了並且輸出棧裡還有元素。(自己在紙上畫畫,在這種條件下,如果進行「翻身」動作,那麼原本在輸出棧準備輸出的元素就被壓到下面了,不符合佇列的規則)

#include

using namespace std;

void

swap

(int

& a,

int& b)

intmain()

st2[k2++

]= x;

//翻身以後再輸入

}else

cout <<

"error:full\n";}

else

if(c ==

'd')

cout << st1[

--k1]

<< endl;

//翻身以後再輸出}}

}return0;

}

7 22 堆疊模擬佇列 25 分

題目鏈結 小容量棧 輸入棧 大容量棧 輸出棧 輸入時 小棧大棧都空時,優先放入小棧 如果小棧滿了,且大棧為空,就倒如大棧中 如果小棧滿了,且大棧已經倒過一次了,說明真的滿了,即此佇列的最大容量為小棧容量的兩倍 輸出時 如果小棧大棧都有資料,優先輸出大棧的資料 如果大棧空,而小棧有資料,則把小棧中的數...

7 22 堆疊模擬佇列 25分

沒注意看題,一開始把元素型別弄成char了,搞了好久都ac不了,換成int一次就ac了。題意 即用兩個棧來模擬佇列,使兩個棧協作實現佇列的功能。思路 1.第乙個棧為輸入棧,第二個棧為輸出棧,輸入棧比輸出棧要小。2.棧滿條件 輸入棧滿了而輸出棧不為空,說明棧滿了,因為輸出棧還有元素的話,輸入棧的元素是...

堆疊 兩個棧模擬佇列

之前想的太複雜了,過分地考慮空間的利用率,使得邏輯非常複雜,簡直要 看了標準答案後,媽的如此簡單!答案思路 準備兩個棧a,b。a專門用於入隊,b專門用於出隊。當要入隊時,如果a沒有滿,那麼很正常地把元素壓入a。如果a已經滿了,如果b是空的,我們就把a的元素全部壓入b,這樣先入棧的元素跑到了b的頂端,...