1 # -*- coding:utf-8 -*- 2 """ 3 数据结构的核心是,一个结构只有特定的操作, 可以实现特定的功能 4 栈的特点是 先进先出 , 一般有这几个操作 5 push 将一个元素存入栈中 6 pop 将一个元素从栈中取出, 并在栈中删除他 7 8 top 将一个元素从栈中取出 9 is_empty 查看栈是否为空 10 """ 11 12 13 # Node 类是一个节点, 有两个属性, 一个储存元素,一个储存指向另一个节点的引用 14 class Node(object): 15 def __init__(self, element=None, next=None): 16 self.element = element 17 self.next = next 18 19 # 这个函数会在print的时候自动调用, 就是把Node显示出来 20 def __repr__(self): 21 return str(self.element) 22 23 24 class Stack(object): 25 # 初始化函数, 自动被调用 26 # 初始化Stack()类的时候, 他有一个head的属性, 值是一个空的Node 27 def __init__(self): 28 self.head = Node() 29 30 # 如果head的next的属性为空, 说明栈为空 31 def is_empty(self): 32 return self.head.next is None 33 34 # 这样不行, 最后找不到head 35 # # 创建一个node, 36 # def push(self,element): 37 # n = Node(element) 38 # self.head.next = n 39 # self.head = n 40 41 # 创建一个node, 并让他指向当前的head.next指向的元素, 在把head.next指向他 42 def push(self, element): 43 n = Node(element, self.head.next) 44 self.head.next = n 45 46 def pop(self): 47 n = self.head.next 48 if not self.is_empty(): 49 self.head.next = n.next 50 return n 51 52 53 def test(): 54 s = Stack() 55 s.push(1) 56 57 print(s.pop()) 58 s.push(2) 59 s.push(3) 60 s.push(4) 61 s.push(5) 62 print(s.pop()) 63 print(s.pop()) 64 print(s.pop()) 65 print(s.pop()) 66 67 68 if __name__ == "__main__": 69 test()