标签:一个 str sel inf 图片 实现 删除节点 表的操作 return
顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。
链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。
单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
class SingleNode(object): """单链表的结点""" def __init__(self,item): # _item存放数据元素 self.item = item # _next是下一个节点的标识 self.next = None
class SingleNode(object): def __init__(self,item): self.item = item self.next = None class SingleLinkList(object): def __init__(self,item=None): self.__head = item def is_empty(self): return self.__head == None def length(self): cur = self.__head count = 0 while cur != None: count += 1 cur = cur.next return count def travel(self): cur = self.__head while cur != None: print(cur.item,end = ‘ ‘) cur =cur.next print("") def add(self,item): #在链表头部添加元素,头插法 node = SingleNode(item) node.next = self.__head self.__head = node def append(self,item): #在链表尾部添加元素,尾插法 node = SingleNode(item) cur = self.__head if self.is_empty(): self.__head = node else: while cur.next != None: cur = cur.next cur.next = node def insert(self,pos,item): # 在指定位置添加,pos从0开始 node = SingleNode(item) pre = self.__head count = 0 if pos <=0: self.add(item) elif pos > self.length()-1: self.append(item) else: while count < pos-1: pre = pre.next count += 1 #当循环退出后,pre指向pos-1 node.next = pre.next pre.next = node def remove(self,item): #删除节点 cur = self.__head pre = None while cur != None: if cur.item == item: #先判断是不是头结点,如果是头结点 if cur == self.__head: self.__head = cur.next else: pre.next = cur.next break else: pre = cur cur = cur.next def search(self,item): cur = self.__head while cur != None: if cur.item == item: return True else: cur = cur.next return False if __name__ == "__main__": ll = SingleLinkList() print(ll.is_empty()) print(ll.length()) ll.append(1) print(ll.is_empty()) print(ll.length()) ll.append(2) ll.add(8) ll.append(3) ll.append(4) ll.append(5) ll.append(6) #8 1 2 3 4 5 6 ll.insert(-1,9) #9 8 1 2 3 4 5 6 ll.travel() ll.insert(3,100)#9 8 1 100 2 3 4 5 6 ll.travel() ll.insert(10,200) #9 8 1 100 2 3 4 5 6 200 ll.travel() ll.remove(8) ll.travel() ll.remove(200) ll.travel() ll.remove(9) ll.travel()
标签:一个 str sel inf 图片 实现 删除节点 表的操作 return
原文地址:https://www.cnblogs.com/echo-kid-coding/p/11175412.html