題目描述
在餐廳裏,洗盤子的工作需要使用到棧這種數據結構。
假設你手裏有一個盤子堆放區。現在需要模擬洗盤子的過程,每個盤子都有一個編號。
盤子堆放區操作説明:
1. 當操作為 1 時,表示從盤子堆放區拿走頂部的盤子清洗。
2. 當操作為 2 時,表示有未洗的盤子放入盤子堆放區。
在一系列操作之後,你需要回答:下一個清洗的盤子編號?
輸入描述
第一行有一個整數 n,代表初始盤子堆放區中盤子的數量為 n。
第二行有 n 個整數,代表了盤子的編號,同時整數之間的順序也代表了未洗盤子加入盤子堆放區的順序。
第三行為一個整數 m,代表接下來將會有 m 次操作。
接下來一共有 m 行,代表共有 m 次操作。
如果是操作 1,那麼該行只會有一個數字 1,代表有一個盤子被拿走清洗。
如果是操作 2,那麼該行有兩個數字,第一個數字 2 表示有未洗的盤子加入,第二個數字代表未洗的盤子編號。
輸出描述
輸出共一行,為下一個該清洗的盤子編號。 如果沒有下一個該清洗的盤子,那麼請輸出 “All the dishes have been washed.”
輸入示例
5
1001 1002 1003 1004 1005
3
1
1
2 1006
輸出示例
1006
點擊查看代碼
#include<iostream>
#include<stack>
using namespace std;
int main(){
int n,val,m,x;
cin >> n;
stack<int> st;
while(n--){
cin >> val;
st.push(val);
}
cin >> m;
while(m--){
cin >> x;
if(x == 1 && !st.empty()) st.pop();
if(x == 2){
cin >> val;
st.push(val);
}
}
if(st.empty()) cout << "All the dishes have been washed." << endl;
else cout << st.top() << endl;
return 0;
}
小結
題目思路
通過棧存儲編號
再判斷操作,1就出棧,2就進棧
要注意出棧要判斷是否棧空
最後輸出結果,先判斷是否棧空。若非輸出棧頂元素
知識點
棧 (stack)
頭文件
#include<stack>
聲明
stack<int> st;
常用方法
empty(): 判斷棧是否為空棧,如果為空棧返回true, 否則或者false
push(): 進棧操作,將新的元素放入到棧中,新的元素成為棧頂元素。
pop(): 出棧操作,棧頂元素從棧中離開
top(): 獲取棧頂元素,但是不會移除它
size(): 獲取棧的長度,即棧中元素的數量
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。