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 相关文章推荐
python读文件逐行处理的示例代码分享
Dec 27 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
详解python中executemany和序列的使用方法
Aug 12 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
Python reduce()函数的用法小结
Nov 15 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
Python函数调用追踪实现代码
Nov 27 Python
Python基础之函数嵌套知识总结
May 23 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/08/15 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
js控制input框只读实现示例
2014/01/20 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
使用mint-ui开发项目的一些心得(分享)
2017/09/07 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
js校验开始时间和结束时间
2020/05/26 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
Python高效编程技巧
2013/01/07 Python
用Python实现换行符转换的脚本的教程
2015/04/16 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
台湾森森购物网:U-mall
2017/10/16 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
甜点店创业计划书
2014/01/27 职场文书
捐资助学倡议书
2014/04/15 职场文书
设计大赛策划方案
2014/06/13 职场文书
十七岁的单车观后感
2015/06/12 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
mysql优化
2021/04/06 MySQL