入棧和出棧的基本操作


描述

 

輸入一個整數序列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;
                }    
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM