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 相关文章推荐
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
python数据处理实战(必看篇)
Jun 11 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
详谈python在windows中的文件路径问题
Apr 28 Python
Python requests发送post请求的一些疑点
May 20 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
Python @property使用方法解析
Sep 17 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python爬取招聘要求等信息实例
Nov 20 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通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
Python内置函数locals和globals对比
2020/04/28 Python
UGG英国官方网站:UGG UK
2018/02/08 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
银行财务部实习生的自我鉴定
2013/11/27 职场文书
文明礼仪事迹材料
2014/01/09 职场文书
30年同学聚会感言
2014/01/30 职场文书
学习演讲稿范文
2014/05/10 职场文书
宣传工作经验材料
2014/06/02 职场文书
电子工程求职信
2014/07/17 职场文书
主要领导对照检查材料
2014/08/26 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python