入栈和出栈的基本操作

入栈和出栈的基本操作描述输入一个整数序列a1,a2,a3…,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。输入多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。输出对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异

大家好,欢迎来到IT知识分享网。入栈和出栈的基本操作"

描述

 

输入一个整数序列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;
                }    
            }
        }
    }
}

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32284.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信