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使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 Python
Python Deque 模块使用详解
Jul 04 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python分支结构(switch)操作简介
Jan 17 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
Python读写文件基础知识点
Jun 10 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
python是否适合网页编程详解
Oct 04 Python
Mac 使用python3的matplot画图不显示的解决
Nov 23 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
说说PHP的autoLoad自动加载机制
2012/09/27 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
jquery延迟对象解析
2016/10/26 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
使用pycharm设置控制台不换行的操作方法
2019/01/19 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
百度JavaScript笔试题
2015/01/15 面试题
小学教师学期末自我评价
2013/09/25 职场文书
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
黄金搭档广告词
2014/03/21 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
Element实现动态表格的示例代码
2021/08/02 Javascript