博客
关于我
无序列表 - 链表
阅读量:413 次
发布时间:2019-03-06

本文共 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

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

转载地址:http://saokz.baihongyu.com/

你可能感兴趣的文章
Nginx gateway集群和动态网关
查看>>
Nginx Location配置总结
查看>>
Nginx log文件写入失败?log文件权限设置问题
查看>>
Nginx Lua install
查看>>
nginx net::ERR_ABORTED 403 (Forbidden)
查看>>
Nginx SSL私有证书自签,且反代80端口
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
nginx 代理解决跨域
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 多端口配置和访问异常问题的排查与优化
查看>>
Nginx 如何代理转发传递真实 ip 地址?
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>
Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
查看>>
Nginx 学习(一):Nginx 下载和启动
查看>>