实现一个栈。
操作:
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())