Python实现单链表数据的添加、删除、插入操作

链表的定义:

  链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。 

当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表。

单链表的结构示意图如下:

代码如下:

#结点定义
class Node(object):
def __init__(self,val,p=0):
self.data = val
self.next = p #链表操作
class LinkList(object):
#定义头结点
def __init__(self):
self.head = 0 def __getitem__(self, key): if self.is_empty():
print('链表为空!')
return elif key <0 or key > self.getlength():
print('键入值错误!')
return else:
return self.getitem(key) def __setitem__(self, key, value): if self.is_empty():
print('链表为空!')
return elif key <0 or key > self.getlength():
print('键入值错误!')
return else:
self.delete(key)
return self.insert(key) #初始化链表
def initlist(self,data): self.head = Node(data[0]) p = self.head for i in data[1:]:
node = Node(i)
p.next = node
p = p.next #获取链表长度
def getlength(self): p = self.head
length = 0
while p!=0:
length+=1
p = p.next return length #判断链表是否为空
def is_empty(self): if self.getlength() ==0:
return True
else:
return False def clear(self): self.head = 0 #单链表添加操作,在尾部添加结点
def append(self,item):
#q为待添加的结点
q = Node(item)
if self.head ==0:
self.head = q
else:
p = self.head
while p.next!=0:
p = p.next
p.next = q #获取结点数据域的值
def getitem(self,index): if self.is_empty():
print('链表为空!')
return
j = 0
p = self.head while p.next!=0 and j <index:
p = p.next
j+=1 if j ==index:
return p.data else:
print('对象不存在!') #链表数据插入操作
def insert(self,index,item): if self.is_empty() or index<0 or index >self.getlength():
print('链表为空!')
return if index ==0:
q = Node(item,self.head)
self.head = q p = self.head
post = self.head
j = 0
while p.next!=0 and j<index:
post = p
p = p.next
j+=1 if index ==j:
q = Node(item,p)
post.next = q
q.next = p #链表数据删除操作
def delete(self,index): if self.is_empty() or index<0 or index >self.getlength():
print('链表为空!')
return if index ==0:
q = Node(item,self.head)
self.head = q p = self.head
post = self.head
j = 0
while p.next!=0 and j<index:
post = p
p = p.next
j+=1 if index ==j:
post.next = p.next def index(self,value):
if self.is_empty():
print('链表为空!')
return p = self.head
i = 0
while p.next!=0 and not p.data ==value:
p = p.next
i+=1 if p.data == value:
return i
else:
return -1 link = LinkList()
link.initlist([1,2,3,4,5])
print(link.getitem(4))
link.append(6)
print(link.getitem(5)) link.insert(4,40)
print(link.getitem(3))
print(link.getitem(4))
print(link.getitem(5)) link.delete(5)
print(link.getitem(5)) link.index(5)

运行结果:

参考资料:

https://www.cnblogs.com/yupeng/p/3413763.html

Python实现单链表数据的添加、删除、插入操作的更多相关文章

  1. 使用OC实现单链表:创建、删除、插入、查询、遍历、反转、合并、判断相交、求成环入口

    一.概念 链表和数组都是一种线性结构,数组有序存储的,链表是无序存储的. 数组中的每一个元素地址是递增或者递减的关系,链表的每一个节点的地址没有此规律,它们是通过指针的指向连接起来. 链表种类:单链表 ...

  2. WebLogic Server添加删除补丁操作【转】【补】

    WebLogic Server添加删除补丁操作 0 查看当前weblogic版本 [weblogic@localhost bin]$ cd /data/bea/weblogic11/wlserver_ ...

  3. 「C语言」单链表/双向链表的建立/遍历/插入/删除

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  4. 基于python实现单链表代码

    1 """ 2 linklist.py 3 单链表的构建与功能操作 4 重点代码 5 """ 6 7 class Node: 8 " ...

  5. 数据结构与算法-python描述-单链表

    # coding:utf-8 # 单链表的相关操作: # is_empty() 链表是否为空 # length() 链表长度 # travel() 遍历整个链表 # add(item) 链表头部添加元 ...

  6. python实现单链表反转(经典笔试题)

    https://blog.csdn.net/su_bao/article/details/81072849 0.说在前面的话 链表结构,说难不难,说易不易,一定要亲自编程实现一下.其次就是一定要耐心, ...

  7. c 单链表反转(不添加新结点空间)

    最近复习考研,加上一直都将"算法"放在很高的位置,所以,蛮重视算法的.不多说了,其实这个问题,不难理解的. 主要代码: //反转单链表. void reverse(linklist ...

  8. python实现单链表及链表常用功能

    单链表及增删实现 单链表高级功能实现:反序,找中间结点,检测环等 参考: https://github.com/wangzheng0822/algo

  9. redis cluster 添加/删除节点操作

    RedisCluster 添加/删除节点 添加节点新配置两个测试节点8008和9009 [root@--- ~]# /usr/local/redis-/bin/redis-server /u02/re ...

随机推荐

  1. 【Webpack】315- 手把手教你搭建基于 webpack4 的 vue2 多页应用

    背景 前司和现司都会存在这种业务场景:有很多 H5 页面是不相关的,如果使用 SPA 的话,对于很多落地页和活动页不太友好,有一些纯前端页面加载过慢,所以就萌生了创建一个多页面 MPA 的框架. 起初 ...

  2. 磁盘分区(GPT)

    右击 我的电脑 → 管理 → 磁盘管理 (对磁盘1进行分区)右击 磁盘1 → 初始化 磁盘1 右击 磁盘1白色部分 → 新建磁盘分区 先创建主分区(主分区最多创建4个,扩展分区最多1个) 输入分区大小 ...

  3. Win32_Processor CPU 参数说明

    转载自:https://blog.csdn.net/yeyingss/article/details/49385421 AddressWidth  --在32位操作系统,该值是32,在64位操作系统是 ...

  4. 4种MySQL分页查询优化的方法,你知道几个?

    前言 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的 ...

  5. PHP ftp获取目录内容为空

    使用PHP的ftp函数获取目录内容,ftp_nlist()和ftp_rawlist()返回都为空. 查了一圈资料找不到答案,然后用Python写了一个,一样的操作就可以获取目录内容. 抓包发现,Pyt ...

  6. NodeJS3-3基础API----event(事件触发器)

    1.基础(on) // 如果像对象享有事件能力就要集成EventEmitter const EventEmitter = require('events') //集成EventEmitter类 cla ...

  7. 数据库day01

    作业: 1. 查看岗位是teacher的员工姓名.年龄 select name,age from staff_info where jobs = 'teacher'; 查看岗位是teacher且年龄大 ...

  8. [ASP.NET Core 3框架揭秘] 文件系统[4]:程序集内嵌文件系统

    一个物理文件可以直接作为资源内嵌到编译生成的程序集中.借助于EmbeddedFileProvider,我们可以采用统一的编程方式来读取内嵌的资源文件,该类型定义在 "Microsoft.Ex ...

  9. 记druid 在配置中心下的一个大坑: cpu 达到 100%

    把我们的dubbo 应用移步到配置中心上去之后,发现我们的应用过一段时间就会出现cpu 100%的情况 (大概是12个小时),一开始cpu占用是2-5% 的样子,什么都没做,后面竟然用尽了cpu.. ...

  10. spring-boot 再添加mysql启动器的时候报错, The driver is automatically registered via the SPI and manual loading of the driver class....

    mysql驱动更新迭代之后驱动,稍微有点变化: com.mysql.jdbc.Driver (变化为) --> driver-class-name: com.mysql.cj.jdbc.Driv ...