链式栈
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedStack:
def __init__(self):
self.top = None # 初始化时栈顶为空
# 入栈操作
def push(self, data):
new_node = Node(data) # 创建一个新节点
new_node.next = self.top # 新节点指向当前栈顶
self.top = new_node # 更新栈顶为新节点
# 判断栈是否为空
def is_empty(self):
return self.top is None
# 出栈操作
def pop(self):
if self.is_empty():
print('栈为空')
popped_node = self.top # 保存当前栈顶节点
self.top = self.top.next # 更新栈顶指针
return popped_node.data # 返回出栈的节点数据
# 取栈顶操作
def peek(self):
if self.is_empty():
print('栈为空')
return self.top.data # 返回栈顶节点的数据
# 打印栈
def show(self):
current = self.top
while current:
print(current.data,end=' ')
current = current.next
print()
#栈大小
def big(self):
m=0
current = self.top
while current:
m=m+1
current = current.next
print('大小为',m)
l=LinkedStack()
l.push(3)
l.push(4)
l.push(5)
l.push(6)
l.push(7)
l.push(8)
l.show()
l.big()
双向链表
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class LinklistS:
def __init__(self, node=None):
self.size = 0
self.head = node
def isEmpty(self):
return self.size == 0
def add_tail(self, data):
node = Node(data)
if self.isEmpty():
self.head = node
node.prev = node
node.next = node
self.size += 1
else:
p = self.head
while p.next != self.head:
p = p.next
p.next = node
node.next = self.head
self.head.prev = node
self.size += 1
def show(self):
if self.isEmpty():
print("Empty List")
else:
p = self.head
while p.next != self.head:
print(p.data, end=' ')
p = p.next
print(p.data)
def remove_tail(self):
if self.isEmpty():
print("Empty List")
else:
if self.size == 1:
self.head = None
self.size = 0
else:
p = self.head
while p.next.next != self.head:
p = p.next
p.next = self.head
self.head.prev = p
self.size -= 1
l = LinklistS()
l.add_tail(1)
l.add_tail(2)
l.add_tail(3)
l.remove_tail()
l.show()
l.add_tail(4)
l.add_tail(5)
l.add_tail(6)
l.remove_tail()
l.show()