无序列表 - 链表
发布日期:2021-05-09 01:15:07 浏览次数:7 分类:博客文章

本文共 2596 字,大约阅读时间需要 8 分钟。

  # 简单地解释一下, 然后重点是上代码即可.   1 """  2 无序列表-链表  3     被构造项的集合, 每个项保持相对于其他项的相对位置, 链式存储  4   5 结构:  6     节点: 包含 数据区 和指针区 (存储下一个元素的位置, 或指向下元素)  7     链式存储: 节点之间, 通过指针进行连接  8   9 思路: 10     节点: 既然包含多种成分, 自然想到用 Class 去封装呀 11     指针: Python中没有指针的概念, 其实 "=" 就是"指向"的概念; 12     即, Python中的变量, 就是 C 语言中的指针, 存的不是值, 而是指向变量的地址 13     因此 Python 的变量不需要声明, 直接指向即可, 因为它并没有存值,而是存指针 14  15 """ 16  17  18 class Node: 19     """节点类""" 20  21     def __init__(self, init_data): 22         self.data = init_data 23         self.next = None 24  25  26 class UnorderedList: 27     def __init__(self): 28         self.head = None 29  30     def is_empty(self): 31         return self.head is None 32  33     def add(self, item): 34         """链表头部插入元素节点""" 35         node = Node(item) 36         # 建议画图来理解指针 连接 和 断链 过程 37  38         # 1. 先让 node的指针next 指向 head 39         node.next = self.head 40         # 2. 再让 head 指向node 41         self.head = node 42  43     def size(self): 44         """遍历节点,并统计节点个数""" 45         count = 0 46         # 构建一个游标 current ,初始指向头节点, 然后依次往后移 47         current = self.head 48         while current is not None: 49             count += 1 50             current = current.next  # 游标移动 51  52         return count 53  54     def search(self, item): 55         """检测元素是否在链表中""" 56         current = self.head 57         while current is not None: 58             # 每移动一次游标, 就取该节点值与判断值进行比较 59             if current.data == item: 60                 return True 61             current = current.next  # 游标往后移动 62  63         return False 64  65     def remove(self, item): 66         """删除节点""" 67         current = self.head 68         prior = None  # 跟随current, 指向其前一个节点 69  70         found = False  # 标记是否找到 71         while not found: 72             # 移动游标, 然后查找到了就退出循环 73             if current.data == item: 74                 found = True 75             else: 76                 # 没有找到则, prior先指向 current, 然后每当current 先移动一次,piror也跟着移一次 77                 prior = current 78                 current = current.next 79  80         # 如果要删除的是 头节点, 则将头结点指向,被删的下一个节点 81         if prior is None: 82             self.head = current.next 83         else: 84             # 直接让 prior 去指向 current.next 就删了 85             prior.next = current.next 86  87  88  89  90 if __name__ == '__main__': 91     # test 92     my_list = UnorderedList() 93  94     my_list.add(666) 95     my_list.add(999) 96     my_list.add(888) 97  98     print(my_list.size()) 99     print(my_list.search(999))100 101     my_list.remove(999)102     print(my_list.search(999))

输出: 

3

True
False

这块相对简单, 也仅是做个记录而已, 主要是怕自己突然给忘记了. 

上一篇:LSTM 原理
下一篇:RNN - 梯度消失与爆炸

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月25日 16时37分59秒