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 相关文章推荐
使用IPython来操作Docker容器的入门指引
Apr 08 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
详解python3实现的web端json通信协议
Dec 29 Python
python requests 使用快速入门
Aug 31 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
python爬虫使用scrapy注意事项
Nov 23 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
自己做矿石收音机
2021/03/02 无线电
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
phalcon框架使用指南
2016/02/23 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
js使用递归解析xml
2014/12/12 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
vue自定义树状结构图的实现方法
2020/10/18 Javascript
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
Python如何生成xml文件
2020/06/04 Python
python算的上脚本语言吗
2020/06/22 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
小学教师听课制度
2014/02/01 职场文书
学生会离职感言
2014/02/11 职场文书
一年级班主任感言
2014/03/08 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
色戒观后感
2015/06/12 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
SQL Server实现分页方法介绍
2022/03/16 SQL Server