兩個棧實現佇列

2021-09-02 04:03:49 字數 1417 閱讀 2005

題目描述:用兩個棧來實現乙個佇列,完成佇列的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

#include#include#include#includetypedef struct node

node,*pnode;

typedef struct stack

stack,*pstack;

/*建立乙個空棧,並返回指向該棧的指標*/

pstack createstack()

return ps;

}/*判斷該棧是否為空 */

bool isempty(pstack ps)

/*向ps指標指向的棧中壓入資料val*/

void pushstack(pstack ps,int val)

return;

}/*從棧中退出資料,並將資料的儲存在pdata指標指向的位置*/

bool popstack(pstack ps,int* pdata)

}/*清空棧,即將其還原為空棧*/

void clearstack(pstack ps)

ps->ptop=ps->pbottom; }}

/*用兩個棧模擬入隊*/

void enterqueue(pstack ps,int val)

/*用兩個棧模擬出對*/

bool deletequeue(pstack ps1,pstack ps2,int *pdata)

popstack(ps2,pdata);

} return true;

}int main()

if(strcmp(input,pop)==0)

} clearstack(ps1);

clearstack(ps2);

return 0;

}

結果:

兩個棧實現佇列 兩個佇列實現棧

1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...

兩個棧實現佇列,兩個佇列實現棧

include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...

兩個棧實現佇列 兩個佇列實現棧

一 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。二 1 自己 基本思路 乙個棧用於壓縮,乙個專門用於彈出。因為棧是先進後出,所有的元素入棧再出棧,再入棧就可以將順序調整過來。但是沒有想到優化。class solution int pop int tem...