给定一个初始为空的栈(栈容量为10)和一系列进栈、出栈操作,请编写程序输出经过这些操作后栈的元素。栈的元素值均为整数。
输入格式:
输入第1行为1个正整数n,表示操作个数;
第2行为给出的n个整数,非0元素表示进栈,此非0元素即为进栈元素,0元素表示出栈。
保证栈中元素个数不超过10个。
输出格式:
第一行按出栈顺序输出所有出栈元素,以一个空格隔开;如果栈满时做进栈操作会输出"FULL”,如果栈空时做出栈操作会输出"EMPTY";
第二行中输出栈中所有元素,以一个空格隔开。
末尾均有一个空格。
输入样例:
12
3 1 2 0 0 -1 0 0 0 4 5 0
输出样例:
2 1 -1 3 EMPTY 5
4
和队的基本操作差不多
主要不同的地方在于,后入栈的先出栈,先入队的先出队。
上代码:
#include<iostream>
int main(){
int store[10]={0};
int i,j=0,k,n;
scanf("%d",&n);
for(i=0;i<n;i++){ //循环挨个检测
scanf("%d",&k);
if(k!=0){ //非0时
if(j<10){ //栈未满时
store[j]=k; //入栈操作
j++;
}
else{ //栈满了输出FULL
printf("FULL ");
}
}
else{ //为0时
if(j-1>=0){ //栈未空时
printf("%d ",store[j-1]); //出栈操作
store[j-1]=0;
j--;
}
else{ //栈空时输出EMPTY
printf("EMPTY ");
}
}
}
printf("\n"); //完成上述操作后输出栈内剩余的数字
for(i=0;i<j;i++){
printf("%d ",store[i]);
}
}
代码写的比较烂,基本是奔着解题去的。
以后再改吧。