赞
踩
顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不灵活。
链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据集,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。
单向链表也叫做单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
【示例】节点实现
class Node(object):
"""单链表的节点"""
def __init__(self, elem):
#item存放数据元素
self.elem = elem
#next是下一个节点的标识
self.next = None
方法名 | 说明 |
---|---|
is_empty() | 链表是否为空 |
length() | 链表长度 |
travel() | 遍历整个链表 |
add(item) | 链表头部添加元素 |
append(item) | 链表尾部添加元素 |
insert(pos, item) | 指定位置添加元素 |
remove(item) | 删除节点 |
search(item) | 查找节点是否存在 |
【示例】单链表实现
#构造单链表的节点 class Node(object): def __init__(self,elem): #elem指数据元素 self.elem = elem #指向下一个节点的链接域 self.next = None #构造单向链表类 class SingleLinkList: #单项链表初始化方法 def __init__(self, node=None): #判断node是否为空 if node != None: headNode = Node(node) self.__head = headNode else: self.__head = node #遍历链表 def travel(self): curNode = self.__head while curNode != None: print(curNode.elem, end = '\t') curNode = curNode.next print('') #在头部添加元素 def add(self, item): #将传入的值构造成节点 node = Node(item) #将新节点的链接域指向头节点 node.next = self.__head #将链表的头head指向新节点 self.__head = node #在单向链表尾部追加元素 def append(self, item): #将传入的值构造成节点 node = Node(item) if self.is_empty(): self.__head = node else:#单链表不为空 curNode = self.__head while curNode.next != None: curNode = curNode.next #修改最后一个节点的next指向新增节点node curNode.next = node #在指定位置添加元素(考虑三种情况) def insert(self, pos, item): if pos <= 0: self.add(item) elif pos > (self.length()-1): self.append(item) #找到指定位置 else: node = Node(item) preNode = self.__head count = 0 while count < (pos-1): count += 1 preNode = preNode.next #先将新节点node的next指向插入位置的节点 node.next = preNode.next #将插入位置的前一个节点的next指向新节点 preNode.next = node #删除节点 def remove(self, item): curNode = self.__head preNode = None while curNode != None: if curNode.elem == item: #判断是否是头节点 if preNode == None: #头节点指向当前节点的next self.__head = curNode.next else: #删除 preNode.next = curNode.next break else: preNode = curNode curNode = curNode.next #查找节点是否存在 def search(self, item): curNode = self.__head while curNode != None: if curNode.elem == item: return True curNode = curNode.next return False #判断当前链表是否为空 def is_empty(self): #判断head指向是否是None,若是则为空链表 return self.__head == None #计算单向链表的长度 def length(self): #计算节点,有几个节点长度就是多少 count = 0 curNode = self.__head while curNode != None: count += 1 curNode = curNode.next return count if __name__=='__main__': #初始化元素值为20的单项链表 singlelinklist = SingleLinkList(20) print('是否为空链表',singlelinklist.is_empty()) print('链表的长度',singlelinklist.length()) print('---------链表遍历---------') singlelinklist.travel() print('-----------查找-----------') print(singlelinklist.search(20)) print('--------头部插入--------') singlelinklist.add(1) singlelinklist.add(2) singlelinklist.add(3) singlelinklist.travel() print('---------尾部追加--------') singlelinklist.append(10) singlelinklist.append(20) singlelinklist.append(30) singlelinklist.travel() print('-------任意位置插入-------') singlelinklist.insert(2,100) singlelinklist.travel() print('--------删除节点-------') singlelinklist.remove(100) singlelinklist.travel() singlelinklist.remove(1) singlelinklist.travel()
【示例】单链表实现_执行结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。