Python数据结构-----单链表

本文深入探讨了链表这一线性数据结构,介绍了其由结点构成的特点,每个结点包含数据域和指针域。文章详细讲解了单链表的操作,如遍历、插入、删除结点的方法,并提供了Python实现的示例代码。通过本文,读者可以理解链表的工作原理及其在内存中的非连续存储特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表是一种数据线性排列的数据结构,由一系列结点构成,结点包括数据域和指针域两部分。数据域主要用于保存结点数据信息,指针域则是存储下一个结点数据的内存地址。链表在内存中可以分散存储,存储空间不必连续。

对于单链表的访问只能从头结点开始,顺序访问,时间复杂度是O(n)。增加和删除结点只需要修改指针域即可,时间复杂度可达到O(1)。
示例程序:

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 25 16:38:36 2019

@author: cc
"""

#python实现单链表
#结点嵌套形式,内存浪费?

#结点类
class SingleLink():
    def __init__(self,data):
        self.data=data
        self.next=None
        
#链域类        
class Operation():
    #初始化头节点
    def __init__(self,sg_link=None):
        self._head=sg_link
        
    '''链表是否为空'''
    def is_empty(self):
        return self._head==None
    
    '''链表长度'''
    def length(self):
        count=0
        cur=self._head
        if cur==None:
            print("空链表")
        else:
            while cur!=None:
                count+=1
                cur=cur.next
        return count
    
    '''遍历整个链表'''
    def traverse(self):
        cur=self._head
        if cur==None:
            print("空链表")
        else:
            while cur!=None:
                print(cur.data,end=' ')
                cur=cur.next
            print('\n')
        
    '''链表尾部添加元素'''
    def append_node(self,elem):
        singlelink=SingleLink(elem)
        if self.is_empty():
            self._head=singlelink
        else:
            cur=self._head
            while cur.next!=None:
                cur=cur.next
            
            cur.next=singlelink
            
    '''链表头部添加元素'''
    def head_insert(self,elem):
        singlelink=SingleLink(elem)
        singlelink.next=self._head
        self._head=singlelink
        
    '''指定位置添加元素'''
    def insert(self,pos,elem):
        singlelink=SingleLink(elem)
        cur=self._head
        while pos-1:
            cur=cur.next
        singlelink.next=cur.next
        cur.next=singlelink
        
    '''删除指定位置元素'''
    def remove(self,pos):
        pre=None
        cur=self._head
        while not pos-2:
            cur=cur.next
        pre=cur.next
        cur.next=pre.next
    '''查找结点是否存在'''
    
    def search(self,elem):
        cur=self._head
        if cur.data==elem:
            print("Find")
        else:
            cur=cur.next
        return False
        print("Not find")
            
        
        
if __name__ =="__main__":
    #头插法
    #声明尾指针
  sglink=Operation()
  print(sglink.is_empty())
  print(sglink.length())
  
  sglink.append_node(10)
  sglink.head_insert(15)
  sglink.insert(1,8)
  print(sglink.is_empty())
  print(sglink.length())
  sglink.traverse()
  sglink.remove(1)
  sglink.traverse()
  sglink.search(15)

测试结果:

True
空链表
0
False
3
15 8 10 

15 10 

Find
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值