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查找第k小元素代码分享
Dec 18 Python
Python中字符串对齐方法介绍
May 21 Python
Python爬取三国演义的实现方法
Sep 12 Python
理解Python中的绝对路径和相对路径
Aug 30 Python
从django的中间件直接返回请求的方法
May 30 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
pycharm重命名文件的方法步骤
Jul 29 Python
keras小技巧——获取某一个网络层的输出方式
May 23 Python
python如何支持并发方法详解
Jul 25 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
js获取ip和地区
2017/03/10 Javascript
vue组件的写法汇总
2018/04/12 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
高职教师岗位职责
2013/12/24 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
教学改革实施方案
2014/03/31 职场文书
小学生读书活动总结
2014/06/30 职场文书
毕业生工作求职信
2014/06/30 职场文书
2014年校长工作总结
2014/12/11 职场文书
文体活动总结
2015/02/04 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
表扬信范文
2019/04/22 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python