w-kx
  1 # 创建一个节点类
  2 class Node:
  3     def __init__(self, item):
  4         self.item = item
  5         self.next = None
  6 
  7 
  8 # 创建一个单链表类
  9 class SingleLink:
 10     def __init__(self):
 11         self.header = None  # 初始化单链表的头结点
 12         self.length = 0  # length:单链表的长度
 13 
 14     # 判断单链表是否为空
 15     def is_empty(self):
 16         if self.header is None:
 17             return True
 18         else:
 19             return False
 20 
 21     '''
 22         实现向单链表添加元素的功能:
 23         有三种实现方式:
 24         1.头插法
 25         2.尾插法
 26         3.从任意指定位置添加元素
 27     '''
 28 
 29     # 1.头插法
 30     def preadd(self, value):
 31         node = Node(value)
 32         if self.is_empty():
 33             self.header = node
 34         else:
 35             node.next = self.header
 36             self.header = node
 37         self.length += 1
 38 
 39     # 2.尾插法
 40     def append(self, value):
 41         node = Node(value)
 42         cur = self.header
 43         while cur.next is not None:
 44             cur = cur.next
 45         cur.next = node
 46         self.length += 1
 47 
 48     # 3.从任意指定位置添加元素
 49     def insert(self, index, value):
 50         node = Node(value)
 51         cur = self.header
 52         if index <= 0:
 53             self.preadd(value)
 54             self.length += 1
 55         elif index > self.length:
 56             self.append(value)
 57             self.length += 1
 58         else:
 59             for i in range(1, index - 1):
 60                 cur = cur.next
 61             node.next = cur.next
 62             cur.next = node
 63             self.length += 1
 64 
 65     '''
 66         实现从单链表中删除元素的功能
 67         有三种删除方式:
 68         1.根据指定位置来删除元素
 69         2.直接删除元素
 70         3.清空单链表
 71     '''
 72 
 73     # 1.根据指定位置来删除元素
 74     def __delitem__(self, index):
 75         if index <= 0 or index > self.length:
 76             raise IndexError
 77         if index == 1:
 78             self.header = self.header.next
 79         else:
 80             cur = self.header
 81             for i in range(1, index - 1):
 82                 cur = cur.next
 83             cur.next = cur.next.next
 84         self.length -= 1
 85 
 86     # 2.直接删除元素
 87     def __delete__(self, value):
 88         self.__delitem__(self.isExist(value))
 89         self.length -= 1
 90 
 91     # 3.清空单链表
 92     def clear(self):
 93         while self.length != 0:
 94             self.__delitem__(self.length)
 95             self.length -= 1
 96     '''
 97         实现修改元素的功能
 98         1.修改指定位置的元素
 99     '''
100     # 1.修改指定位置的元素
101     def __setitem__(self, index, value):
102         cur=self.header
103         if not isinstance(index,int):
104             raise TypeError
105         if 0<index<self.length:
106             for i in range(index-1):
107                 cur=cur.next
108             cur.item=value
109         else:
110             print('您输入的信息有误!')
111     '''
112         实现对单链表的查找功能
113         有三种实现方式:
114         1.查找某元素,并返回其在链表中的位置
115         2.根据位置来查找对应的元素
116         3.遍历单链表,查找出所有元素
117     '''
118 
119     # 1.查找某元素,并返回其在链表中的位置
120     def isExist(self, value):
121         cur = self.header
122         for i in range(self.length):
123             if cur.item == value:
124                 return i + 1
125             cur = cur.next
126 
127     # 2.根据位置来查找对应的元素
128     def __getitem__(self, index):
129         cur = self.header
130         if index <= 0 or index > self.length:
131             return print('您输入的信息有误')
132         for i in range(index - 1):
133             cur = cur.next
134         return print('第%d个位置的元素是%d' % (index, cur.item))
135 
136     # 3.遍历单链表,查找出所有元素
137     def show(self):
138         cur = self.header
139         if self.length == 0:
140             print('目前单链表中没有数据!')
141         else:
142             print('目前单链表的元素有:', end=' ')
143             for i in range(self.length):
144                 print('%s' % cur.item, end=' ')
145                 cur = cur.next
146             print('\n')
147 
148 
149 if __name__ == '__main__':
150     s = SingleLink()
151     s.preadd(12)
152     s.preadd(23)
153     s.preadd(32)
154     s.show()
155     s.append(14)
156     s.append(43)
157     s.append(15)
158     s.show()
159     print('元素32在单链表的第%d个位置' % s.isExist(32))
160     print('从第三个位置插入元素:57')
161     s.insert(3, 57)
162     s.show()
163     print('删除第一个位置的元素')
164     s.__delitem__(1)
165     s.show()
166     print('直接删除元素43:')
167     s.__delete__(43)
168     s.show()
169     s.__getitem__(2)
170     s.__setitem__(3,9000)
171     s.show()
172     print('清空单链表:')
173     s.clear()
174     s.show()

 

相关文章: