数据结构之链表

单链表

什么是单链表

在单链表中,每个节点由两部分组成,一个数据域,用来存放结点的内容,另一个是指针域,用来存放结点的后继的地址(位置)。
在这里插入图片描述

单链表的运算

建表

以下是无头结点
1. 尾插法建表
尾插法顾名思义就是在链表的尾部插入元素,如果只有head指针,每插入一个元素都要遍历一次,效率很低,所以要加入rear指针,始终指向尾部。
在这里插入图片描述

2. 头插法建表
头插法顾名思义就是在链表的首部插入元素,因为有head指针,所以直接在首部插入,时间复杂度O(1),效率很高。
在这里插入图片描述

表长

这个很好理解,就是算出链表中有多少个元素,遍历时计数,就可以求出表长

按序号查找

链表开始部分沿着指针链向后顺序查找,一直搜索到第i个点为止

插入

步骤:

  1. 在链表中找到插入位置,这可通过按序号查找来实现
  2. 生成一个以x为值的新结点
  3. 将新结点插入
    在这里插入图片描述

删除

  1. 找到第 i 个结点
  2. 删除该结点
    在这里插入图片描述

相关代码

class Node:                  # 创建一个链表的结构
    def __init__(self,x):
        self.data = x
        self.next = None

        
class List:
    def __init__(self):
        self.head = None
        
    def RearInsert(self,array):   # 尾插法
        self.head = Node(array[0])
        pTmp = self.head
        for i in range(1,len(array)):
            p = Node(array[i])
            pTmp.next = p
            pTmp = pTmp.next

    def HeadInsert(self,array):   # 头插法
        self.head = Node(array[0])
        for i in range(1,len(array)):
            p = Node(array[i])
            p.next = self.head
            self.head = p
    
    def ListLength(self):   # 表长
        i = 0
        pTmp = self.head
        while pTmp:
            pTmp = pTmp.next
            i += 1
        return i
        
    
    def search(self,num):  # 按序号查找元素
        i = 0
        pTmp = self.head
        while pTmp:
            if i == num - 1:
                return pTmp.data
            pTmp = pTmp.next
            i += 1
            
    def Insert(self,i,data):  # 按序号插入元素
        pTmp = self.head
        for k in range(i-1):
            pTmpl = pTmp.next
        pTmpr = pTmpl.next
        pTmpl.next = Node(data)
        pTmpl.next.next = pTmpr

        
    def Delete(self,i):   # 按序号删除元素
        pTmp = self.head
        for k in range(i-1):
            pTmpl = pTmp.next
        pTmp = pTmpl.next
        pTmpr = pTmpl.next.next
        pTmpl.next = pTmpr
        del pTmp

《数据结构教程与题解》清华大学出版社

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值