当前位置: 首页 > news >正文

Python数据结构day2

一、链表

1.1目的

解决顺序表存储数据有上限,并且插入和删除操作效率低的问题

1.2概念

链表:链式存储的线性表,使用随机物理内存存储逻辑上连续的数据

链表的组成:由一个个结点组成

结点:由数据域和链接域组成,是链表的基本单位

数据域:存储数据元素的区域

链接域:记录下一个结点所在位置的区域

头结点:虚设的一个结点,连接域专门记录链表第一个结点的位置,数据域专门记录链表的长度

1.3链表的种类

单向链表、双向链表、循环链表

二、单向链表

2.1单向链表的概念

只能通过头结点或链表的头,单向的访问后继结点的链表叫单向链表

2.2结点和链表类的格式

1】包含存储数据元素的数据域

2】有一个存储下一个结点的位置域

#封装普通节点的类
class Node:#构造函数,定义结点的属性def __init__(self,data):self.data=data#普通结点的数据域self.next=None#普通结点的连接域,刚构造的结点该位置域为空
#封装链表的类(封装头节点)
class Link_list():def __init__(self,node=None):self.size=0#头结点的数据域为0 链表的长度为0self.head=node#头结点的连接域指向None

2.3单向列表的相关操作(成员函数的封装)

1】单向链表的创建

2】判空

#判空def is_empty(self):return self.head#   return self.size==0  或者判断长度是否为零

3】头插

函数功能:将一个结点以头插的方式插入到头结点的后面

思路:

参数:self链表,要插入的数据

注意事项:需要申请结点封装数据

                  插入成功链表长度自增

#头插def add_head(self,value):#创建一个新的结点node=Node(value)node.next=self.headself.head=nodeself.size+=1

4】尾插

函数功能:将新的节点增加到链表的尾部。思路:(如上图)

函数返回值:无

函数名:符合命名规则

参数列表:self 链表,要插入的数据

注意事项:插入成功,链表自增

#尾插def add_tail(self, value):#创建一个结点nodenode = Node(value)#找最后一个结点# q = self.head# i=1# while i<self.size:#     q=q.next#     i+=1# q.next=node# self.size+=1#第二种方法q = self.headwhile q.next:q = q.nextq.next = nodeself.size += 1#第三种# while True:#     q=q.next#     if not q.next:#         q.next = node#         self.size+=1#         break

5】任意位置插

函数功能:在指定的位置插入一个节点 思路:如上图

函数返回值:无

函数名:符合命名规则

参数列表:self链表、要插入的位置、要插入的数据

注意事项:1、判断要插入的位置是否合理

2、成功插入 ;链表长度自增

3、如果是第一个位置,做头插

#任意位置插def add_any(self, id, value):node = Node(value)if id == 1:self.add_head(value)elif id == self.size+1:self.add_tail(value)elif id>self.size+1:print('插入失败')returnelse:q = self.headi = 1while i < id - 1:q = q.nexti += 1node.next = q.nextq.next = nodeself.size += 1

6】头删

#头删def del_head(self):self.head = self.head.nextself.size -= 1

7】尾删

#尾删def del_tail(self):if self.size==1:self.head=Noneelse:q = self.headfor i in range(self.size - 2):q = q.nextq.next = Noneself.size -= 1

8】任意位置删

#任意位置删def del_any(self,id):if id==1:self.del_head()else:q = self.headfor i in range(id - 2):q = q.nextq.next = q.next.nextself.size -= 1

9】遍历

函数功能:从头到尾打印出链表中每个节点的数据域的数据

函数返回值:无

函数名:符合命名规则

参数列表:self 链表

注意事项:判空

#遍历def show(self):#判空if self.is_empty():print('遍历失败')returnelse:q = self.headwhile q :print(q.data,end=' ')q = q.nextprint()

http://www.lryc.cn/news/489926.html

相关文章:

  • 后台通用tag面包屑
  • oracle数据恢复—通过拼接数据库碎片的方式恢复Oracle数据的案例
  • node.js fluent-ffmpeg 桌面推流
  • AWS的流日志
  • 大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
  • Qt入门1——认识Qt的几个常用头文件和常用函数
  • ElasticSearch学习篇17_《检索技术核心20讲》最邻近检索-局部敏感哈希、乘积量化PQ思路
  • 在 Sublime Text 中直接预览 Markdown 文件
  • 分词器的概念(通俗易懂版)
  • 速通前端篇 —— CSS
  • 数据库表设计范式
  • 经济增长初步
  • 【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
  • 时间请求参数、响应
  • PyTorch图像预处理:计算均值和方差以实现标准化
  • slice介绍slice查看器
  • Android音频采集
  • 通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
  • 类和对象( 中 【补充】)
  • 如何使用gpio模拟mdio通信?
  • C# 中的事件和委托:构建响应式应用程序
  • 科技赋能健康:多商户Java版商城系统引领亚健康服务数字化变革
  • 区块链网络示意图;Aura共识和Grandpa共识(BFT共识)
  • Javaweb梳理18——JavaScript
  • 面向对象-接口的使用
  • 失落的Apache JDBM(Java Database Management)
  • Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统
  • MySQL 三大日志详解
  • Java 岗面试八股文及答案整理(2024最新版)
  • Web3.0安全开发实践:Clarity最佳实践总结