#3901. 【模板】栈

【模板】栈

题目描述

实现栈的基本操作:判断栈是否为空,进栈,出栈,读取栈顶元素。

输入格式

第一行输入一个正整数 tt,表示接下来有 tt 个操作。题目保证所有操作都合法。

接下来 tt 行,每行一个操作,为以下几种之一,具体请查看样例:

  • 11 判断栈是否为空,如果为空输出 truetrue,不为空输出 falsefalse
  • 22 xxxx 进栈
  • 33 出栈一个元素,并输出它的值
  • 44 读取栈顶元素并输出

输出格式

每个操作需要换行,具体请查看样例。

样例

20
1
2 130
2 178
2 106
2 52
2 14
2 285
3
3
4
1
2 257
4
2 178
3
2 108
4
2 150
4
1
true
285
14
52
false
257
178
108
150
false

示例代码

  1. Python3Python3
# Author: guke

MaxSize = 50

class Stack(object):

    def __init__(self):
        self.__list = [0 for _ in range(MaxSize)]
        self.top = -1

    def push(self, item):
        self.top += 1
        self.__list[self.top] = item

    def pop(self):
        x = self.__list[self.top]
        self.top -= 1
        return x

    def get_top(self):
        return self.__list[self.top]

    def is_empty(self):
        if self.top == -1:
            return 'true'
        else:
            return 'false'


if __name__ == "__main__":
    s = Stack()
    t = int(input())
    for _ in range(t):
        ali = [int(__) for __ in input().split()]
        if ali[0] == 1:
            print(s.is_empty())
        elif ali[0] == 2:
            s.push(ali[1])
        elif ali[0] == 3:
            print(s.pop())
        else:
            print(s.get_top())
  1. C++C++
// Author: wentaotao

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N = 100;
typedef struct{
    int data[N];
    int top;
}seqstack;
void createStack(seqstack *s){
    s->top=0;
}
int empty(seqstack *s){
    if(s->top==0)return 0;
    else return 1;
}
int full(seqstack *s){
    if(s->top==N-1)return 1;
    else return 0;
}
int push(seqstack *s,int x){
    if(full(s))return 0;
    else{
        s->top++;
        (s->data)[s->top]=x;
        return 1;
    }
}
int pop(seqstack *s,int x){
    if(empty(s)==0)return 0;
    else{
        x=(s->data)[s->top];
        cout<<x<<endl;
        s->top--;
        return 1;
    }
}
int top(seqstack *s,int x){
    if(empty(s)==0)return 0;
    x=(s->data)[s->top];
    cout<<x<<endl;
    return 1;
}
signed main(){
    seqstack s;
    createStack(&s);
    int T=1;
    IOS;
    cin>>T;
    while(T--){
        int n;
        cin>>n;
        int x;
        if(n==1){
            if(empty(&s)==0)cout<<"true"<<endl;
            else cout<<"false"<<endl;
        }
        else if(n==2){
            cin>>x;
            push(&s,x);
        }
        else if(n==3){
            pop(&s,x);
        }
        else{
            top(&s,x);
        }
    }
    return 0;
}