题目描述:
实现一个栈的数据结构,使其具有以下方法:压栈、弹栈、取栈顶元素、判断栈是否为空以及获取栈中元素个数。
分析与解答:
栈的实现有两种方法,分别采用数组来实现和采用链表来实现。
# 方法一:用数组实现栈
class MyStack():
# 模拟栈
def __init__(self):
self.items=[]
# 判断栈是否为空
def isEmpty(self):
return len(self.items)==0
# 返回栈的大小
def size(self):
return len(self.items)
# 返回栈顶元素
def top(self):
if not isEmpty():
return self.items[len(self.items)-1]
else:
return None
# 弹栈
def pop(self):
if len(self.items)>0:
return self.items.pop()
# 压栈
def push(self, item):
self.items.append(item)
# if __name__=="__main__":
# s = MyStack()
# s.push(4)
# s.push(3)
# s.push(2)
# s.push(1)
# print("栈顶元素为:"+str(s.top))
# print("栈大小为:"+str(s.size()))
# s.pop()
# print("弹栈成功")
# 方法二:用链表实现栈
# 声明链表的结点
class LNode():
def __init__(self):
self.data = None # 数据域
self.next = None # 指针域
# 创建栈
class MyStack1():
def __init__(self):
self.data = None
self.next = None
# 判断栈是否为空,如果为空返回True,否则返回False
def isEmpty(self):
if self.next == None:
return True
else:
return False
# 获取栈的大小
def size(self):
num = 0
p = self.next
while p != None:
num += 1
p = p.next
return num
# 返回栈顶元素
def top(self):
if self.next != None:
return self.next.data
print("栈已经为空")
return None
# 压栈
def push(self, e):
p = LNode()
p.data = e
p.next = self.next
self.next = p
# 弹栈
def pop(self):
tmp = self.next
if tmp != None:
self.next = tmp.next
return tmp.data
print("栈已经为空")
return None
if __name__=="__main__":
s = MyStack1()
s.push(2)
print("栈顶元素为:"+str(s.top()))
print("栈的大小为:"+str(s.size()))
s.pop()
print("弹栈成功")