描述
輸入一個整數序列a1,a2,a3...,an。當ai不等於-1時將ai進棧;當ai=-1時,輸出棧頂元素並將其出棧。
輸入
多組數據,每組數據有兩行,第一行為序列的長度n,第二行為n個整數,整數之間用空格分隔。當n=0時輸入結束。
輸出
對於每一組數據輸出若干行。每行為相應的出棧元素。當出棧異常時,輸出“POP ERROR”並結束本組數據的輸出。
輸入樣例 1
5 1 2 -1 -1 1 5 1 -1 -1 2 2 0
輸出樣例 1
2 1 1 POP ERROR
最基本的常規棧操作,沒啥可說的
#include<iostream> using namespace std; #define MAXSIZE 1000 #define OK 1 #define ERROR -1 typedef struct{ int *base; int *top; int stacksize; }SqStack; int InitStack(SqStack &S){ S.base=new int[MAXSIZE]; if(!S.base) return -2; S.top=S.base; S.stacksize=MAXSIZE; return OK; } int Push(SqStack &S,int e){ if(S.top-S.base==S.stacksize) return ERROR; *S.top++=e; return OK; } int Pop(SqStack &S){ if(S.top==S.base) return ERROR; S.top--; return OK; } int GetTop(SqStack &S){ if(S.top!=S.base) return *(S.top-1); } int main(){ while(1){ int n; cin>>n; SqStack S; if(n==0) return 0; InitStack(S); int a[MAXSIZE]; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++){ if(a[i]!=-1) Push(S,a[i]); else{ if(S.top!=S.base){ cout<<GetTop(S)<<endl; Pop(S); } else{ cout<<"POP ERROR"<<endl; break; } } } } }
