算法入门——数据结构(栈)python3实现(1)

实现一个栈。

操作:

push x:将 x加入栈,保证 x为 int 型整数。

pop:输出栈顶,并让栈顶出栈

top:输出栈顶,栈顶不出栈

 输入描述:

第一行为一个正整数 n ,代表操作次数。(1≤n≤100000)

接下来的 n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。

 输出描述:

如果操作为push,则不输出任何东西。

如果为另外两种,若栈为空,则输出 "error“

否则按对应操作输出。

示例1:

输入输出
6
push 1
pop
top
push 2
push 3
pop

1
error
3

 概念

首先对栈进行介绍。栈是一种数据结构,有时也称“后进先出栈”(push-down stack)。对数据项的添加和删除往往发生在栈的同一端,这一端通常称为“顶部”,与之对应的一段称为“底部”。

栈的底部很重要,因为在栈中靠近底部的项是存储时间最长的。最近添加的项往往是最先被移除的。这种排序原则被称为LIFO(Last in First Out)。

栈的操作:

Stack() 创建一个新的空栈,它不需要参数,并返回一个空栈。

push(item)将一个新项添加到栈的顶部,它需要item做参数并不返回任何内容。

pop()从栈中删除顶部项,它不需要参数,并返回栈删除的顶部项。

top()从栈中返回顶部项,它不需要参数。

isEmpty()测试栈是否为空,不需要参数,并返回布尔值。

size()返回栈中的项的个数,不需要参数,并返回一个整数。

栈的实现是创建一个类,栈操作实现为类方法。

栈的应用:符号匹配、十进制与二进制转换等。

思路:

· 输入是push时,以第一行为例,字符串为'push 1',判断该字符串的前四位是否等于push,如果相等,将push 和 1分隔开,对栈进行push操作,输出为push的元素1。

· 输入是pop时,判断栈是否为空,如果为空,那么输出error,否则删除栈的顶部项并输出。

· 输入是top时,判断栈是否为空,如果为空,那么输出error,否则输出栈的顶部项。

代码实现:

class Stack:
    def __init__(self):
        self.items = []

    def push(self, x):
        x = int(x)
        return self.items.append(x)

    def pop(self):
        return self.items.pop()

    def top(self):
        return self.items[-1]

    def isEmpty(self):
        return self.items == []

    def size(self):
        return len(self.items)
s = Stack()
n_inputs = int(input())
for i in range(n_inputs):
    func = input()
    if func[0:4] == 'push':
        b = func.split(' ')
        s.push(int(b[1]))
    elif func == 'pop':
        if s.isEmpty():
            print('error')
        else:
            print(s.pop())
    elif func == 'top':
        if s.isEmpty():
            print("error")
        else:
            print(s.top())

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

弓早早o_O

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值