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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
在Python中使用next()方法操作文件的教程
May 24 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
python实现画圆功能
Jan 25 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
python挖矿算力测试程序详解
Jul 03 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
Python有参函数使用代码实例
Jan 06 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
Python 匹配文本并在其上一行追加文本
May 11 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绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
如何使用php输出时间格式
2013/08/31 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
2018/08/09 jQuery
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
js+h5 canvas实现图片验证码
2020/10/11 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
Python中的下划线详解
2015/06/24 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
就业自荐书
2013/12/05 职场文书
校园新闻广播稿
2014/01/10 职场文书
美术毕业生求职信
2014/02/25 职场文书
房产委托公证书
2014/04/08 职场文书
教师业务培训方案
2014/05/01 职场文书
师德模范事迹材料
2014/06/03 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
交通事故被告答辩状
2015/05/22 职场文书