python实现抽象数据类型=>单向链表

server/2024/12/22 15:02:34/

 链表的相关概念

        在顺序表中,由于逻辑上相邻的元素其物理位置也相邻,因此可以随机存取顺序表中的任何一个元素。但是,顺序表也存在着如下缺点:

  1. 插入和删除运算需要移动大量的元素
  2. 顺序表中的存储空间必须事先分配好,而事先分配的存储单元大小可能不适合问题的需要。对很多高级程序设计语言来说,事先分配好存储空间后不容易调整

        采用链式存储的线性表称为链表,链表可以分为单向链表、双向链表、循环链表。

        所谓线性表的链式存储,是指采用一组任意的存储单元存放线性表中的元素。这组存储单元可以是连续的,也可以是不连续的。为了表示这些元素之间的逻辑关系,除了需要存储元素本身的信息外,还需要存储指示其后继元素的地址信息。这两部分组成的存储结构,称为结点。结点包括两个域:数据域和指针域。其中,数据域存放数据元素的信息,指针域存放元素的直接后继的存储地址

用python实现单向链表

class ListNode:"""节点类"""def __init__(self, x):#当前节点的值(数据域)self.val = x#当前节点的后继节点的地址(指针域)self.next = Noneclass LinkedList:"""单向链表类"""def __init__(self):self.head = Noneself.len = 0def size(self):"""返回链表的长度"""return self.lendef insert(self, pos, val):"""在指定的位置插入传入的值"""if pos < 0 or pos > self.size():raise ValueError("Invalid position")newNode = ListNode(val)if pos == 0:newNode.next = self.headself.head = newNodeelse:prev = self.headfor _ in range(pos-1):prev = prev.nextnewNode.next = prev.nextprev.next = newNodeself.len += 1def delete(self, pos):"""删除指定位置的值"""if pos < 0 or pos >= self.size():raise ValueError("Invalid position")if pos == 0:self.head = self.head.nextelse:prev = self.headfor _ in range(pos-1):prev = prev.nextprev.next = prev.next.nextself.len -= 1def update(self, pos, val):"""更新指定位置的值"""if pos < 0 or pos >= self.size():raise ValueError("Invalid position")current = self.headfor _ in range(pos):current = current.nextcurrent.val = valdef search(self, val):"""根据传入的值查找对应的节点对象查到:返回节点对象未查到:返回None"""current = self.headwhile current:if current.val == val:return currentcurrent = current.nextreturn Nonedef index(self, val):"""根据传入的值查找对应的索引查到:返回索引未查到:返回-1"""i = 0current = self.headwhile current:if current.val == val:return ii += 1current = current.nextreturn -1def LinkedPrint(self):"""打印"""current = self.headwhile current:print(current.val, end="->")current = current.nextprint(None)def test():"""测试"""L = LinkedList()L.insert(0, 5)L.insert(0, 6)L.insert(0, 8)L.insert(0, 4)L.insert(0, 'a')L.insert(0, 'd')L.insert(0, 't')L.insert(0, 2)L.insert(0, 3)L.insert(0, 7)L.insert(2, 20)L.insert(4, 'tt')L.delete(4)L.delete(0)L.update(0, 30)print(L.search('t'))print(L.index('t'))L.LinkedPrint()print(L.size())test()


http://www.ppmy.cn/server/8640.html

相关文章

Linux 远程联机服务(一)- Telnet服务器

Linux 远程联机服务&#xff08;一&#xff09;- Telnet服务器 第1关&#xff1a;安装Telnet编程要求预期输出输入 第2关&#xff1a;Telnet服务器启动/关闭编程要求预期输出输入 第3关&#xff1a;Telnet远程登录编程要求预期输出输入 第1关&#xff1a;安装Telnet 编程要求 …

第十四届蓝桥杯填空题(日期统计)

问题描述 小蓝现在有一个长度为 100 的数组&#xff0c;数组中的每个元素的值都在 0 到 9 的范围之内。数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 …

【Linux】进程和计划任务

目录 一、进程介绍 1.1 进程与线程的定义 1.1.1 进程(Process)** 1.1.2 线程(Thread)** 1.1.3 进程与线程的区别 1.2 进程的特征 1.3 进程状态 1.3.1 进程的基本状态 1.3.2 进程更多的状态 1.4 进程的优先级 1.5 进程间通信 1.6 进程的分类* 二、进程管理 2.1 查看…

CentOS 安装 PHP 7

1. 安装 epel-release 1. 什么是epel 如果既想获得 RHEL 的高质量、高性能、高可靠性&#xff0c;又需要方便易用(关键是免费)的软件包更新功能&#xff0c;那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。 EPEL 是由 Fedora 社区打造&a…

一二三应用开发平台使用手册——系统管理-用户组-使用说明

概述 在RBAC模型中&#xff0c;资源、角色、用户三个关键元素&#xff0c;构成权限体系。在平台设计和实现的时候&#xff0c;以下几个核心问题思考如下&#xff1a; 角色&#xff0c;单层平铺还是树形结构&#xff1f; 在小型应用中&#xff0c;角色数量有限的情况下&#x…

【Leetcode笔记】501.二叉搜索树中的众数

文章目录 题目要求ACM 模式代码知识点 题目要求 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 …

IDEA报错然后pycharm闪退

pycharm闪退&#xff0c;在C盘的USER文件夹下有报错文件 打开一看&#xff0c;说内存不足 # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 14596177920 bytes for G1 virtual space # Possib…

2024年高校辅导员考试题库及答案

一、选择题 4.根据宪法和法律&#xff0c;可以制定行政法规的是&#xff1a;&#xff08;&#xff09; A.全国人民代表大会&#xff1b; B.全国人民代表大会常务委员会&#xff1b; C.国务院&#xff1b; D.国家教育部 答案&#xff1a;C …