关于栈和队列的讲解可以参考:数据结构-知识点栈和队列
1. 栈
1.1 基于链式存储的栈结构
class Node:
def __init__(self
, data
=None):
self
.data
= data
self
.next = None
class LStack:
def __init__(self
):
self
._head
= Node
()
self
._count
= 0
def is_empty(self
):
return self
._count
== 0
def push(self
, elem
):
tmp
= Node
(elem
)
if self
.is_empty
():
self
._head
= tmp
else:
tmp
.next = self
._head
self
._head
= tmp
self
._count
+= 1
def pop(self
):
if self
.is_empty
():
raise IndexError
("stack error:试图从空栈中弹出数据")
else:
self
._count
-= 1
elem
= self
._head
.data
self
._head
= self
._head
.next
return elem
if __name__
== "__main__":
mystack
= LStack
()
mystack
.push
(10)
mystack
.push
(20)
mystack
.push
(30)
mystack
.push
(40)
while not mystack
.is_empty
():
print(mystack
.pop
())
1.2 基于顺序存储的栈结构
class SStack:
def __init__(self
):
self
._elem
= []
def is_empty(self
):
return self
._elem
== []
def push(self
, elem
):
self
._elem
.append
(elem
)
print(self
._elem
)
def pop(self
):
if self
.is_empty
():
raise IndexError
("stack error:试图从空栈中弹出数据")
return self
._elem
.pop
()
if __name__
== "__main__":
mystack
= SStack
()
mystack
.push
(10)
mystack
.push
(20)
mystack
.push
(30)
mystack
.push
(40)
while not mystack
.is_empty
():
print(mystack
.pop
())
2. 基于顺序存储的队列结构
class SQueue:
def __init__(self
):
self
._elem
= []
def is_empty(self
):
return self
._elem
== []
def push(self
, data
):
self
._elem
.insert
(0, data
)
def pop(self
):
if self
.is_empty
():
raise IndexError
("stack error:试图从空栈中弹出数据")
return self
._elem
.pop
()
if __name__
== "__main__":
myqueue
= SQueue
()
myqueue
.push
('aaa')
myqueue
.push
('bbb')
myqueue
.push
('ccc')
myqueue
.push
('ddd')
while not myqueue
.is_empty
():
print(myqueue
.pop
())
转载请注明原文地址:https://ipadbbs.8miu.com/read-28861.html