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

双链表算法的基本实现

一、双链表的定义

在Python中,我们可以通过定义一个节点类和双链表类来实现双链表。

1. 声明一个节点类

class Node(object):def __init__(self, values):# 节点值self.values = values# 前驱指针self.prior = None# 后驱指针self.next = None

2. 声明一个双链表类

class Linken(object):def __init__(self):# 头结点self.head = None# 尾结点self.tail = None

二、链表的基本操作

1. 判断链表是否为空

def Empty(self):return self.head is None

2. 记数链表的长度

def Length(self):size = 0p = self.headwhile p != None:size += 1p = p.nextreturn size

3. 实现链表的头插法

def InsertHead(self, values):newnode = Node(values)if self.Empty():self.head = newnodeself.tail = self.headelse:self.head.prior = newnodenewnode.next = self.headself.head = newnodereturn 1

4. 实现链表的尾插法

def InsertTail(self, values):newnode = Node(values)if self.Empty():self.head = newnodeself.tail = newnodeelse:self.tail.next = newnodenewnode.prior = self.tailself.tail = newnodereturn 1

5. 实现链表的中间插法

def Insert(self, index, values):if index <= 0:self.InsertHead(values)elif index > self.Length() - 1:self.InsertTail(values)else:newnode = Node(values)p = self.headfor i in range(index - 1):p = p.nextnewnode.prior = p.priornewnode.next = pp.prior.next = newnodep.prior = newnodereturn 1

6. 实现链表的头删法

def DeleteHead(self):if self.Empty():return Noneelif self.head == self.head.next:self.head = Noneself.tail = Noneelse:self.head = self.head.nextself.head.prior = None

7. 实现链表的尾删法

def DeleteTail(self):if self.Empty():return Noneelif self.head == self.tail:self.head = Noneself.tail = Noneelse:self.tail = self.tail.priorself.tail.next = None

8. 实现链表的中间删法

def Delete(self, index):if index <= 0:self.DeleteHead()elif index > self.Length() - 1:self.DeleteTail()else:p = self.headfor i in range(index - 1):p = p.nextp.prior.next = p.nextp.next.prior = p.prior

9. 实现链表的元素的查询

def SelectLinken(self, values):p = self.headwhile p:if p.values == values:print(p.values, end=' ')breakp = p.next

10. 实现链表的内容输出查询

def OutValues(self):p = self.headwhile p:print(p.values, end=' ')p = p.nextprint()

三、运行实例

1.测试代码

if __name__ == '__main__':# 测试以上定义的方法print('-------------------头插法-------------------')linken = Linken()linken.InsertHead(1)linken.InsertHead(2)linken.InsertHead(3)linken.InsertTail(4)linken.Insert(2, 5)linken.OutValues()print('中间删除:')linken.Delete(2)linken.OutValues()print('尾节点删除:')linken.DeleteTail()linken.OutValues()print('头节点删除:')linken.DeleteHead()linken.OutValues()print(linken.SelectLinken(8))print('-------------------尾插法-------------------')linken = Linken()linken.InsertTail(1)linken.InsertTail(2)linken.InsertTail(3)linken.Insert(2, 4)linken.OutValues()print('中间删除:')linken.Delete(2)linken.OutValues()print('尾节点删除:')linken.DeleteTail()linken.OutValues()print('头节点删除:')linken.DeleteHead()linken.OutValues()print(linken.SelectLinken(8))

2.运行展示

在这里插入图片描述


http://www.mrgr.cn/news/16972.html

相关文章:

  • LeetCode_sql_day20(1398.购买了产品A和产品B却没有购买产品C的顾客)
  • 大模型辅助软件开发,助力工程师的开发之路
  • sqli-labs靶场通关攻略(51-60)
  • 深入探索C语言中的各种Sleep方法
  • 一分钟学会系列-1电烙铁(焊台)
  • 【惊天BUG】select * from 表 where value = 0;查询结果让大师兄都傻眼了
  • 大模型web服务部署—lobe-chat 部署
  • 6种方法:如何克服编程挫折,找到突破的学习方法
  • 折叠cell的学习
  • 【Python百日进阶-Web开发-Peewee】Day298 - 骇客 Hacks
  • 计算机毕业设计选题推荐-公司考勤管理系统-Java/Python项目实战
  • python 地理抠图
  • 爬虫常用模板
  • 足浴城消费系统小程序的设计
  • Python知识点:如何使用Coverage进行代码覆盖率分析
  • 中国文化艺术孙溟展浅析《绛帖》
  • 音视频开发之旅(90)-Vision Transformer论文解读与源码分析
  • 文心快码前端工程师观点分享:人机协同新模式的探索之路(一)
  • 设计模式之中介者模式
  • 常用排序算法(上)