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实现从web抓取文档的方法
Sep 26 Python
python 中random模块的常用方法总结
Jul 08 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
python实现微信防撤回神器
Apr 29 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
Python concurrent.futures模块使用实例
Dec 24 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
Pytest allure 命令行参数的使用
Apr 18 Python
Python绘制散乱的点构成的图的方法
Apr 21 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初学入门
2006/11/19 PHP
php自定义错误处理用法实例
2015/03/20 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
php构造函数与析构函数
2016/04/23 PHP
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
python实现简易学生信息管理系统
2020/04/05 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
美国精油公司:Plant Therapy
2019/05/17 全球购物
4s店机修工岗位职责
2013/12/20 职场文书
最美家庭活动方案
2014/08/31 职场文书
工作收入住址证明
2014/10/28 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
考勤制度通知
2015/04/25 职场文书
四年级语文教学反思
2016/03/03 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
利用Apache Common将java对象池化的问题
2022/06/16 Servers