本專欄持續輸出數據結構題目集,歡迎訂閱。
文章目錄
- 題目
- 代碼
題目
請編寫程序,將 n+1 個整數順序壓入容量為 n 的棧,隨后執行 n+1 次取頂并出棧的操作。
輸入格式:
輸入首先在第一行給出正整數 n(≤10^4 );隨后一行給出 n+1 個 int 范圍內的整數,數字間以空格分隔。
輸出格式:
將輸入的n+1 個整數順序壓入容量為 n 的棧,隨后執行 n+1 次取頂并出棧的操作,輸出取出的元素的值,每行一個。
注意:當棧已滿時,入棧操作應該不執行,并在一行中輸出錯誤信息 錯誤:棧已滿。;當棧為空時,取頂和出棧操作應該不執行,并在一行中輸出錯誤信息 錯誤:棧為空。空棧取頂應返回 -1。
輸入樣例:
5
1 2 3 4 5 6
輸出樣例:
錯誤:棧已滿。
5
4
3
2
1
錯誤:棧為空。
-1
錯誤:棧為空。
代碼
#include <stdio.h>#define MAX_SIZE 10000int stack[MAX_SIZE];
int top = -1;// 入棧操作
void push(int value, int n) {if (top >= n - 1) {printf("錯誤:棧已滿。\n");return;}stack[++top] = value;
}// 出棧操作
int pop() {if (top < 0) {printf("錯誤:棧為空。\n");return -1;}return stack[top--];
}// 獲取棧頂元素
int peek() {if (top < 0) {printf("錯誤:棧為空。\n");return -1;}return stack[top];
}int main() {int n;scanf("%d", &n);// 壓入n+1個元素for (int i = 0; i < n + 1; i++) {int num;scanf("%d", &num);push(num, n);}// 執行n+1次取頂和出棧for (int i = 0; i < n + 1; i++) {int top_val = peek();if (top_val != -1) {printf("%d\n", top_val);} else {printf("%d\n", -1);}pop();}return 0;
}