題目描述

在餐廳裏,洗盤子的工作需要使用到棧這種數據結構。
假設你手裏有一個盤子堆放區。現在需要模擬洗盤子的過程,每個盤子都有一個編號。

盤子堆放區操作説明:

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(): 獲取棧的長度,即棧中元素的數量