Python数据结构之双向链表的定义与使用方法示例


Posted in Python onJanuary 16, 2018

本文实例讲述了Python数据结构之双向链表的定义与使用方法。分享给大家供大家参考,具体如下:

和单链表类似,只不过是增加了一个指向前面一个元素的指针而已。

示意图:

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)

结果为;

Python数据结构之双向链表的定义与使用方法示例

和单链表结果一样。

PS:双向链表就是将链表首尾相接。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
python使用代理ip访问网站的实例
May 07 Python
浅谈python新式类和旧式类区别
Apr 26 Python
python读写配置文件操作示例
Jul 03 Python
keras的三种模型实现与区别说明
Jul 03 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
python process模块的使用简介
May 14 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 #Python
Python面向对象编程之继承与多态详解
Jan 16 #Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 #Python
python中将字典形式的数据循环插入Excel
Jan 16 #Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 #Python
详解python函数传参是传值还是传引用
Jan 16 #Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 #Python
You might like
php对数组排序代码分享
2014/02/24 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
关于Django Models CharField 参数说明
2020/03/31 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
酒店前厅员工辞职信
2014/01/08 职场文书
小学毕业感言300字
2014/02/19 职场文书
语文教研活动总结
2014/07/02 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
世界十大狙击步枪排行榜
2022/03/20 杂记