数据结构之链表详解——python实现

为什么使用链表

链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

链表的定义

链表(Linked List )是一种很常见的数据结构,链表也是一种线性表,他不像顺序表一样连续存储,而是在每个数据节点上会存放下一个节点的地址信息,通过这样的方式把每个数据节点链接起来。
在这里插入图片描述

单向链表

单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
在这里插入图片描述

  • 表元素域elem用来存放具体的数据。
  • 链接域next用来存放下一个节点的位置(python中的标识)
  • 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。

节点实现

class SingleNode(object):
	#单链表的节点
	def __init__(self,item):
		 # _item存放数据元素
		self.item=item
		# _next是下一个节点的标识
		self.next=None

单链表的操作

  • is_empty() 链表是否为空
  • length() 链表长度
  • travel() 遍历整个链表
  • add(item) 链表头部添加元素
  • append(item) 链表尾部添加元素
  • insert(pos, item) 指定位置添加元素
  • remove(item) 删除节点
  • search(item) 查找节点是否存在

单链表的实现

class SingleLinkList(object):
	#初始化,定义好头结点
	def __init__(self):
		self.__head=None
		
	#判断链表是否为空	
	def is_empty(self):
		return seif.__head is None
		
	def length(self):
        """链表长度"""
        count=0
        cur=self.__head
        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

头部添加元素

在这里插入图片描述

def add(self, item):
        """头部添加元素"""
        node=SingleNode(item)
        # 将新节点的链接域next指向头节点,即_head指向的位置
        node.next=self.head.next
        # 将链表的头_head指向新节点
        self.head=node

尾部添加元素

 def append(self, item):
        """尾部添加元素"""
        node=SingleNode(item)
        # 先判断链表是否为空,若是空链表,则将_head指向新节点
        if self.is_empty():
        	self.head=node
        # 若不为空,则找到尾部,将尾节点的next指向新节点
        else:
	        cur=self.head
	        while cur.next !=None
	        	cur=cur.next
	        cur.next=node

指定位置添加元素

在这里插入图片描述

 def insert(self, pos, item):
        """指定位置添加元素"""
        # 若指定位置pos为第一个元素之前,则执行头部插入
        if pos<=0:
        	self add(item)
         # 若指定位置超过链表尾部,则执行尾部插入
         elif pos>=(self.length()-1):
         	self.append(item)
         # 找到指定位置
         else:
         	node=SingleNode(item)
         	count=0
         	pre=self.__head
         	while count<(pos-1):
         		count+=1
         		pre=pre.next
         	node.next=pre.next
         	pre.next=node

删除节点

在这里插入图片描述

def remove(self,item):
        """删除节点"""
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章