1.链表的定义
如图:
注意:
(1)线性表包括顺序表和链表
(2)顺序表是将元素顺序地存放在一块连续的存储区里
(3)链表是将元素存放在通过链构造的存储快中
2. 单向链表的实现
#!/usr/bin/env python # _*_ coding:UTF-8 _*_ class Node(object): def __init__(self, elem): self.elem = elem self.next = None class SingleLinkList(object): '''单向链表''' def __init__(self, node=None): self.__head = node def add(self, item): '''向单向链表的头部添加元素''' node = Node(item) node.next = self.__head self.__head = node return True def insert(self, pos, item): '''向单向链表指定位置插入元素''' if pos <= 0: self.add(item) elif pos > self.length() -1: self.append(item) else: pre = self.__head count = 0 while pos - 1 > count: count += 1 pre = pre.next node.next = pre.next pre.next = node return True def append(self, item): '''向单向链表的尾部追加元素''' node = Node(item) cur = self.__head while cur != None: if cur.next != None: cur = cur.next else: break cur.next = node return True def remove(self, item): pass def search(self, item): '''指定元素搜索''' cur = self.__head index = 0 while cur != None: if cur.elem != item: cur = cur.next index += 1 else: return index return -1 def travel(self): '''遍历打印单向链表的值''' cur = self.__head str = '' while cur != None and cur.elem != None: str += '%s' % cur.elem cur = cur.next return str def length(self): '''返回单向链表的长度''' cur = self.__head count = 0 while cur != None: count += 1 cur = cur.next return count def is_empty(self): return self.__head == None if __name__ == "__main__": singleLinkList = SingleLinkList() print singleLinkList.is_empty() print singleLinkList.length() singleLinkList.add(1) singleLinkList.insert(0, 2) singleLinkList.append(3) print singleLinkList.is_empty() print singleLinkList.length() print singleLinkList.travel() print singleLinkList.search(3)
结果如下:
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day3/link_list_test.py True 0 False 3 213 2 Process finished with exit code 0
扫描二维码关注公众号,回复:
2605395 查看本文章