python类形式的栈

题目:

小邋遢的衣橱

小邋遢 MS.Jinlin 是个爱打扮的公主,他有很多晚礼服如"LALA" "NIHAOMA"、"WOBUHAO"、"NIHAOBUHAO"等众多衣服,可是由于衣服太多他要把它们装进箱子,但是作为公主,肯定是会突发奇想觉得哪件衣服好看,就把他拿了出来,当然那件衣服上面的衣服也被拿出来了,而且会弄乱了,小邋遢在经过几次的叠衣服和取衣服后,他想知道箱子里最上面的衣服是哪一件,如果箱子为空的话,就告诉她 Empty ,如果有多件一样的衣服,肯定是取走最上面的那一件啦。

输入:

第 1 行,输入N,代表共计进行了几次操作
第 2 行至第 N+1 行,进行in out 操作
in 为 放入衣服
out 为 取出衣服

格式:  

    in name1  
    out name2

现在有以下样例输入:

样例 1:

输入:

6
in AMDYES
in INTELNO
in USBAD
in CNYES
out INTELNO
in MDICN

输出:

MDICN

样例 2:

输入:

5
in AMDYES
in INTELNO
in USBAD
in CNYES
out AMDYES

输出:
Empty

思路:

第一步:

创建一个栈,以及一个栈的栈顶指针

顺序栈 栈 1
栈顶指针 指针 1

第二步:

我们要声明并定义入栈函数:

  1. 按照栈的定义使用栈顶指针模拟即可
  2. 需要传入一个参数来表示放什么数据
in(Name)
{
    栈不满,Name 进入栈;
    栈满,返回 False;
}

第三步:

我们声明并定义判空函数:

通过栈顶指针大小即可判断。

isEmpty()
{
    1. 如果栈为空返回True
    2. 不为空返回False
}

第四步:

我们要声明并定义出栈函数:

  1. 按照栈的定义使用栈顶指针模拟即可
  2. 返回一个数据表示出栈元素。
out()
{
    如果栈为空则不能出栈,返回False;
    不为空,则出栈。
}

第五步:

我们声明并定义取栈顶函数:

  1. 只需要将栈顶元素取出即可
  2. 先判断是否为空
    string getTop()
    {
        如果栈为空则不能取栈顶,返回null;
        不为空,则返回栈顶。
    }

第六步:

主函数代码:

输入N
循环N次://
    
输入OP,输入name 

根据执行OP执行in或out操作
    
判空,取栈顶输出答案

答案(python源码):

class myStack:
    def __init__(self):
        self.data=[]
    #入栈
    def push(self,element):
        self.data.append(element)
    #判空
    def is_empty(self):
        return self.data==[]
    #出栈
    def pop(self):
        if self.data==[]:
            return
        
        return self.data.pop()
    #取栈顶元素
    def top(self):
        if self.data==[]:
            return
        
        return self.data[-1]
if __name__=='__main__':
    N=int(input())
    stack=myStack()
    for i in range(N):
        op=input().split()
        if op[0]=="in":
            stack.push(op[1])
        else:
            while stack.top()!=op[1]:
                stack.pop()
            stack.pop()
    
    if stack.is_empty():
        print("Empty")
    else:
        print(stack.top())

 声明:文章部分内容,参考或者引用蓝桥云课上的文章。链接如下:

蓝桥杯省赛 14 天夺奖冲刺营 - 数据结构基础之链表篇 - 蓝桥云课 (lanqiao.cn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古剑诛仙

你的鼓励是我创造的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值