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根据文件大小打log日志
Oct 09 Python
python通过pil模块将raw图片转换成png图片的方法
Mar 16 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
Python 查找字符在字符串中的位置实例
May 02 Python
CentOS7安装Python3的教程详解
Apr 10 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
python 自动刷新网页的两种方法
Apr 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二维数组排序方法(array_multisort usort)
2013/12/25 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
python删除文件示例分享
2014/01/28 Python
Python实现类继承实例
2014/07/04 Python
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Python中求对数方法总结
2020/03/10 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
暑期实习鉴定
2013/12/16 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
任命书怎么写
2014/06/04 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
创业计划书之美甲店
2019/09/20 职场文书