栈:是一种先进后出的数据结构;本片文章,我们用python的面向对象来构造这样的数据结构。
栈中的每一个数据除了存储当前的数值外,还存储着当前数值下一个数据的类型(注意不是下一个数据的数值)。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Node(object): # 栈中的每一个结点有两个属性,一个是当前的数值,另一个是下一个节点的值。
def __init__(self,value=None):
self.value = value
self.next = 0
class stack(object):
def __init__(self):
self.node = Node()
self.lstack = [self.node, ]
def push(self,elem): # 定义入栈的函数
oldnode = self.lstack[0]
item = Node(elem) # 把这个数值实例化为栈中的数据类型
if oldnode.value == None: # 如果是第一个值,则当前value为当前值,next值为0; 这里的第一个值是要放入栈底的,因此它的next值W为0!
item.value = elem
item.next = 0
else:
item.value = elem # 如果不是第一个值,则当前值为当前值,next值为紧邻的那个值的数据类型,
item.next = oldnode
self.lstack.append(item) # 把新的数据节点加入到lstack列表
self.lstack.pop(0) # 然后去除列表中的上一次的数据节点,最后一个节点加入之后,lstack列表中存储的就是最上面的那个节点类型。
def popitem(self): # 定义出栈的函数
upnode = self.lstack[0]
print(upnode.value)
self.lstack.append(upnode.next)
self.lstack.pop(0)
向栈中压入三个数值:
#压入元素
s = stack()
s.push("A")
s.push("B")
s.push("C")
#取出元素
s.popitem()
s.popitem()
s.popitem()
---------------执行结果---------------C
B
A