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 enumerate遍历数组示例应用
Sep 06 Python
Python实现发送email的几种常用方法
Aug 18 Python
跟老齐学Python之print详解
Sep 28 Python
Python实现设置windows桌面壁纸代码分享
Mar 28 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
python select.select模块通信全过程解析
Sep 20 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
python中有函数重载吗
May 28 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
python实现简单聊天功能
Jul 07 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
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
JavaScript高级程序设计
2006/12/29 Javascript
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
围观tangram js库
2010/12/28 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
轻松掌握python设计模式之策略模式
2016/11/18 Python
Flask框架配置与调试操作示例
2018/07/23 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
物流专业求职信
2014/06/30 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
离婚协议书标准格式
2014/10/04 职场文书
投资申请报告
2015/05/19 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js