|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 歌者文明清理员 于 2023-2-10 17:37 编辑
新建一个空白.py文件,命名为singlelink.py
上次学习了节点,并保存为了node.py
将singlelink和node保存在同一目录下
今天的程序需要使用node.py的Node类,所以
然后,说明一下SingleLink实例的属性和方法
- 属性 head 头节点,说白了就是列表的abdcys7[0](名字乱起的)
- 属性 length 长度
- 方法 add(data) 添加元素data到开头
网上有些不讲代码的思路,很难懂,所以我讲解一下
- def add(self, data):
- # 在node.py的示例中,节点可以说是一环套一环,node1.next.next是node1往后两个元素
- # 所以我们也要“包围”self.head,代替第一个元素,用一个新节点替换掉self.head
- new = Node(data, next=self.head)
- self.head = new # 原来的self.head并没有被“抛弃”,它成为了new.next
复制代码
- 方法 append(data) 在末尾追加元素
- def append(self, data):
- if self.length: # 如果是整数作为条件,0为false,其他True
- # length - 1是最后一个元素的索引
- # 包围新节点
- self.get(self.length - 1).next = Node(data)
- else:
- self.head = Node(data)
- # 完全可以写成Node(data, next=self.head),可length为0的时候head是None,所以next=None,也是默认值,所以没有这个必要
复制代码
- 方法 get(index) 获取索引index
打了这么多,先看看目前程序变啥样了吧
- from node import Node
- # -*- coding: utf-8 -*-
- class SingleLink:
- def __init__(self):
- self.head = None
- self.length = 0
- def __len__(self): # len(instance)的时候调用的函数
- return self.length
- def __repr__(self):
- msg = ''
- values = list(self)
- return str(values)
- def __iter__(self): # 当试图将链表改变为可迭代对象
- if self.length:
- cur = self.head
- yield cur.data
- while cur.next != None:
- cur = cur.next
- yield cur.data
- def get(self, index):
- return list(self)[index]
- def __getitem__(self, key):
- return self.get(key)
- def add(self, data):
- new = Node(data, next=self.head)
- self.head = new
- self.length += 1
- def append(self, data):
- if self.length:
- self.get(self.length - 1).next = Node(data)
- else:
- self.head = Node(data)
- self.length += 1
- if __name__ == '__main__':
- sl = SingleLink()
- sl.append(9)
- print(list(sl))
复制代码
注:空格可能没敲对,用ipad的
还有,重复的length和__len__、get和getitem是为了给用户(你们)更多的选择,想怎么样怎么样
接受建议改过之后都2400多字节了,所以这只是(1)而已 |
|