python数据结构之栈的实现
题目描述
实现栈的数据结构,使其具有以下方法
1、创建空栈
1、添加新元素
3、弹栈
4、返回栈顶元素
5、判断栈是否空栈
6、返回栈的元素个数
方法一:数组实现.
在采用数组模拟栈的时候,栈空间是一段连续的空间。具体思路是:将数组的首元素作为栈底,记录元素的个数,利用这个原理非常容易完成栈的操作
源代码
class Stack(object):
"""栈"""
def __init__(self):
self.data = []
def isEmpty(self):
"""判断是否空栈"""
return self.data == []
def peek(self):
"""返回栈顶元素"""
return self.data[len(self.data) - 1]
def size(self):
"""返回元素个数"""
return len(self.data)
def push(self, data):
"""入栈"""
self.data.append(data)
def pop(self):
"""出栈"""
self.data.pop()
if __name__ == '__main__':
# 以下为测试用例
stack = Stack()
print(stack.size())
print("将0-10入栈")
for i in range(11):
stack.push(i)
print("此时栈的大小为:", end=" ")
print(stack.size())
print("出栈3个")
for i in range(3):
stack.pop()
print("此时栈的大小为:", end=" ")
print(stack.size())
# 栈菲空时输出栈顶元素,输出一个弹出一个
while stack.isEmpty() is not True:
print(stack.peek(), end=" ")
stack.pop()
方法二:链表实现
采用带头节点的链表,从头结点插入新节点即可完成栈的创建
源代码
class Node(object):
"""结点"""
def __init__(self,data):
self.data = data
self.next = None
class Stack(object):
"""使用链表来模拟栈"""
def __init__(self):
self.data = None
self.next = None
def isEmpty(self):
"""判断是否空栈"""
if self.next is None:
return True
else:
return False
def size(self):
"""返回栈的大小"""
cur = self.next
i = 0 #计数器
while cur is not None:
i += 1
cur = cur.next
return i
def push(self, data):
"""入栈"""
cur = Node(data)
cur.data = data
cur.next = self.next
self.next = cur
def pop(self):
"""出栈"""
cur = self.next
if cur is not None:
self.next = cur.next
return cur.data
print("栈空")
def peek(self):
"""返回栈顶元素"""
cur = self.next
return cur.data
if __name__ == '__main__':
#以下为测试用例
stack = Stack()
print(stack.size())
print("将0-10入栈")
for i in range(11):
stack.push(i)
print("此时栈的大小为:", end=" ")
print(stack.size())
print("出栈3个")
for i in range(3):
stack.pop()
print("此时栈的大小为:", end=" ")
print(stack.size())
# 栈菲空时输出栈顶元素,输出一个弹出一个
while stack.isEmpty() is not True:
print(stack.peek(), end=" ")
stack.pop()