Python数据结构之双向链表的定义与使用方法示例
作者:yupeng 时间:2023-06-29 06:20:45
本文实例讲述了Python数据结构之双向链表的定义与使用方法。分享给大家供大家参考,具体如下:
和单链表类似,只不过是增加了一个指向前面一个元素的指针而已。
示意图:
python 实现代码:
#!/usr/bin/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 "脚本之家测试结果:"
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)
结果为;
和单链表结果一样。
PS:双向链表就是将链表首尾相接。
希望本文所述对大家Python程序设计有所帮助。
来源:https://www.cnblogs.com/yupeng/p/3413800.html
标签:Python,数据结构,双向链表
0
投稿
猜你喜欢
Python引用类型和值类型的区别与使用解析
2021-06-18 10:45:59
浏览器 cookie 限制
2008-05-23 13:09:00
python实现列表的排序方法分享
2022-10-06 07:56:01
jquery判断元素是否隐藏的多种方法
2024-04-19 10:23:51
centos7 PHP环境搭建 GD库 等插件安装方法
2023-11-05 21:25:38
python中的集合及集合常用的使用方法
2023-05-04 11:14:11
2007流行网站导航设计欣赏
2008-02-18 12:20:00
Python 中如何将十六进制转换为 Base64
2022-09-07 01:20:14
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2021-07-02 21:19:25
javascript自动生成包含数字与字符的随机字符串
2024-04-17 09:45:29
Python3.6 Schedule模块定时任务(实例讲解)
2022-08-14 15:55:00
MYSQL初学者扫盲
2009-02-27 13:15:00
在Pandas中导入CSV数据时去除默认索引的方法汇总
2023-03-16 02:35:53
python3基于OpenCV实现证件照背景替换
2022-06-08 02:16:53
python k-近邻算法实例分享
2022-03-26 14:47:17
Python 实现子类获取父类的类成员方法
2022-01-14 00:28:17
python实现rsa加密实例详解
2021-08-24 03:32:51
Mysql的数据库迁移到另一个机器上的方法详解
2024-01-16 18:33:24
Golang使用Gin框架实现HTTP上传文件过程介绍
2024-04-28 09:18:12
TensorFlow实现Softmax回归模型
2023-07-14 19:07:51