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 相关文章推荐
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
python pytest进阶之xunit fixture详解
Jun 27 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
Python实现自动整理文件的脚本
Dec 17 Python
python asyncio 协程库的使用
Jan 21 Python
pycharm 如何查看某一函数源码的快捷键
May 12 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电台频率大全 - 16 河南省
2020/03/11 无线电
php中文字母数字验证码实现代码
2008/04/25 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
JavaScript中正则表达式判断匹配规则及常用方法
2017/08/03 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python3 requests模块如何模仿浏览器及代理
2020/06/15 Python
python中有帮助函数吗
2020/06/19 Python
html5时钟实现代码
2010/10/22 HTML / CSS
计算机软件专业求职信
2014/06/10 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书