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基础教程之Filter使用方法
Jan 17 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
把csv文件转化为数组及数组的切片方法
Jul 04 Python
python处理数据,存进hive表的方法
Jul 04 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
Python中的xlrd模块使用原理解析
May 21 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
利用python Pandas实现批量拆分Excel与合并Excel
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
PHP5中MVC结构学习
2006/10/09 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
js实现圆盘记速表
2015/08/03 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
Python设计模式之中介模式简单示例
2018/01/09 Python
python设置环境变量的原因和方法
2019/06/24 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python中的列表与元组的使用
2019/08/08 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
大一自我鉴定范文
2013/12/27 职场文书
房屋继承公证书
2014/04/10 职场文书
协议书范本
2014/04/23 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
工作感想范文
2015/08/07 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
pandas数值排序的实现实例
2021/07/25 Python