python双向链表的实现
python双向链表和单链表类似,只不过是增加了一个指向前面一个元素的指针,下面的代码实例了python双向链表的方法
示意图:
python双向链表实现代码:
# -*- coding: utf-8 -*-
class Node(object):
def __init__(self, val, p=0):
self.data = val
self.next = p
self.prev = p class LinkList(object):
def __init__(self):
self.head = 0 def __getitem__(self, key): if self.is_empty():
print('linklist is empty.')
return elif key < 0 or key > self.getlength():
print('the given key is error')
return else:
return self.getitem(key) def __setitem__(self, key, value): if self.is_empty():
print('linklist is empty.')
return elif key < 0 or key > self.getlength():
print('the given key is error')
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
node.prev = p
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 = Node(item)
if self.head == 0:
self.head = q
else:
p = self.head
while p.next != 0:
p = p.next
p.next = q
q.prev = p def getitem(self, index): if self.is_empty():
print('Linklist is empty.')
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('target is not exist!') def insert(self, index, item): if self.is_empty() or index < 0 or index > self.getlength():
print('Linklist is empty.')
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.prev = post
q.next = p
p.prev = q def delete(self, index): if self.is_empty() or index < 0 or index > self.getlength():
print('Linklist is empty.')
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
p.next.prev = post def index(self, value): if self.is_empty():
print('Linklist is empty.')
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 l = LinkList()
l.initlist([1, 2, 3, 4, 5])
print(l.getitem(4))
l.append(6)
print(l.getitem(5))
l.insert(4, 40)
print(l.getitem(3))
print(l.getitem(4))
print(l.getitem(5))
l.delete(5)
print(l.getitem(5))
l.index(5)
输出:
5
6
4
40
5
6
python双向链表的实现的更多相关文章
- Python 双向链表
操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, it ...
- python双向链表的疑问(Question)
Table of Contents 1. 问题 问题 在看 collections.OrderedDict 的源码时,对于它如何构造有序的结构这一部分不是很理解,代码如下: class Ordered ...
- Python 双向链表 快速排序
1.创建链表: from random import randint class DLinkedNode(object): def __init__(self, data=None, pre=None ...
- python 数据结构之双向链表的实现
和单链表类似,只不过是增加了一个指向前面一个元素的指针而已. 示意图: python 实现代码: #!/usr/bin/python # -*- coding: utf-8 -*- class Nod ...
- Python链表的实现与使用(单向链表与双向链表)
参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...
- (转)Python 实现双向链表(图解)
原文:https://blog.csdn.net/qq490691606/article/details/49948263 Python 实现双向链表(图解)双向链表双向链表也叫双链表,是链表的一种, ...
- Python 实现双向链表(图解)
原文:https://blog.csdn.net/qq490691606/article/details/49948263 git 路径 https://github.com/wangpanjun/d ...
- 用Python写单向链表和双向链表
链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大. 链表由一个个节点组成. 单向链表的节点分为两个部分:存储的对象和对下一个节点的引用.注意是指向下一个节点. 而双向链表 ...
- python算法与数据结构-双向链表(40)
一.双向链表的介绍 一种更复杂的链表是“双向链表”或“双面链表”.每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值:而另一个指向下一个节点,当此节点为最后一个节点时,指向空值. ...
随机推荐
- AD18使用原理图优先选项( Preference)调整原理图纸张大小失效问题解决
1.创建新的原理图纸后,在当前点击更改并不会生效 2.想要生效需要去原理图纸的文档详细属性中更新即可生效!以下两种方式可以打开文档选项按钮. a.O->D 打开文档选项 b.右下角选择Prope ...
- Auto Generate Reflection Information for C++
https://www.reddit.com/r/gamedev/comments/3lh0ba/using_clang_to_generate_c_reflection_data/ https:// ...
- Fitness - 07.23 - Congratulation!
倒计时161天 运动54分钟,共计5组半,5.8公里.拉伸5分钟. 每组跑步10分钟(6.5KM/h),走路1分钟(5.5KM/h). 终于突破了耐力跑的一天,可喜可贺! 差一点就到6公里了,觉得自己 ...
- Unity图文混排
http://blog.csdn.net/akof1314/article/details/49028279 http://blog.csdn.net/akof1314/article/details ...
- 启动oracle11监听器错误
启动oracle11监听器错误:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案 . 关键字:启动oracle10监听器错误:本地计算机上的Ora ...
- 2020重新出发,NOSQL,MongoDB是什么?
什么是MongoDB ? MongoDB 是一个开源的文档数据库,它基于 C++ 语言编写,性能高,可用性强,能够自动扩展. MongoDB 是最流行的 NoSQL 数据库之一,原生支持分布式集群架构 ...
- Agumaster 增加股票表台账页面
- 逆向工程,生成pojo、xml、mapper
package com.how2java; import java.io.File; import java.io.InputStream; import java.util.ArrayList; i ...
- Tomcat三实例cluster多播方案共享session再配置
昨天已经将两实例cluster多播方案共享Session配置成功,其中的关键就在于server.xml中,engine->channel->receiver节点中address得写成自己的 ...
- Java I/O流 复制文件速度对比
Java I/O流 复制文件速度对比 首先来说明如何使用Java的IO流实现文件的复制: 第一步肯定是要获取文件 这里使用字节流,一会我们会对视频进行复制(视频为非文本文件,故使用之) FileInp ...