《劍指offer》面試題七 用兩個棧實現佇列

2021-06-21 06:27:46 字數 1154 閱讀 5262

原題位址 

題目描述:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。

佇列中的元素為int型別。

這裡用兩個陣列來模擬兩個棧。由於棧的特點是先進後出,佇列的特點是先進先出,所以這裡要用兩個棧來實現,乙個棧先進後出,兩個棧的話就可以先進先出了。

其中乙個棧(稱呼a棧吧)專門用來完成push操作。只要有push我們就往這個棧壓入元素。

但是需要出棧的時候,先看看b棧是否為空,如果不為空的話就直接出棧好了。但如果為空的話,我們需要先判斷a棧是否為空,a棧為空的話 則整個隊列為空;但如果不為空的話,我們就需要將a棧的元素挨個壓入b棧中,這樣其實也就實現了 佇列的先進先出,負負為正嘛。

原題完整描述如下:

題目描述:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。

佇列中的元素為int型別。

輸入:每個輸入檔案包含乙個測試樣例。

對於每個測試樣例,第一行輸入乙個n(1<=n<=100000),代表佇列操作的個數。

接下來的n行,每行輸入乙個佇列操作:

1. push x 向佇列中push乙個整數x(x>=0)

2. pop 從佇列中pop乙個數。

輸出:對應每個測試案例,列印所有pop操作中從佇列pop中的數字。如果執行pop操作時,隊列為空,則列印-1。

樣例輸入:

3

push 10

poppop

樣例輸出:

10

-1

#includeint a[100010];

int b[100010];

int ap; //pointer to stack a

int bp; //pointer to stack b

void push_stack(int x)

void pop_stack()

else while(ap!=-1)

}printf("%d\n",b[bp]);

bp--;

}int main()

else

}}}

劍指Offer 面試題七 用兩個棧實現佇列

templateclass cqueue cqueue void t deletehead void print private stackstack1 stackstack2 stack1只相當於乙個轉換器,新增元素時經過stack1將元素統統存入stack2中,也就是說stack2中存入元素,s...

劍指Offer 面試題9用兩個棧實現佇列

思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...

劍指offer 面試題9 用兩個棧實現佇列

棧後進先出,佇列先進先出。1.當stack2不為空時,stack2中的棧頂元素是最先進入佇列的元素,可以彈出。2.當stack2為空時,把stack1中的元素逐個彈入並壓入stack2中,先入stack1的元素這時在stack2頂部,這時彈出stack2就完成了佇列 書上的圖更便於理解 class ...