e447 - queue 練習
題目描述
題目要求實作一個佇列 (queue) 並處理一系列的操作。操作包括將元素加入佇列尾端、輸出佇列前端的元素,以及刪除佇列前端的元素。如果嘗試從空佇列中獲取或刪除元素,則需要處理相應的邊界情況。
解題思路
本題的核心是使用佇列資料結構來模擬題目描述的操作。使用 C++ 的 std::queue 容器來儲存整數元素。程式首先讀取操作次數 N,然後迴圈 N 次,每次讀取操作類型 k。
- 如果
k等於 1,則讀取一個整數x並將其加入佇列尾端。 - 如果
k等於 2,則檢查佇列是否為空。如果佇列不為空,則輸出佇列前端的元素;否則,輸出 -1。 - 如果
k等於 3,則檢查佇列是否為空。如果佇列不為空,則刪除佇列前端的元素;否則,忽略該操作。
複雜度分析
- 時間複雜度: O(N),其中 N 是操作次數。因為每個操作(push, front, pop)在佇列上的時間複雜度都是 O(1),而迴圈執行 N 次。
- 空間複雜度: O(N),在最壞的情況下,佇列可能儲存 N 個元素。
程式碼
#include <stdio.h>
#include <queue>
int main() {
int a=0;
std::queue<int> st;
scanf("%d",&a);
while(scanf("%d",&a)>0) {
if(a==1){
scanf("%d",&a);
st.push(a);
}
else if(a==2){
if(st.empty()==1)
printf("-1\n");
else
printf("%d\n",st.front());
}
else{
if(st.empty()!=1)
st.pop();
}
}
}