栈:是一种先进后出的数据结构;本片文章,我们用python的面向对象来构造这样的数据结构。
栈中的每一个数据除了存储当前的数值外,还存储着当前数值下一个数据的类型(注意不是下一个数据的数值)。
class Node(object): # 栈中的每一个结点有两个属性,一个是当前的数值,另一个是下一个节点的值。 def __init__(self,value=None): self.value = value self.next = 0class 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