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网络爬虫功能的基本写法
Jan 28 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
浅析python打包工具distutils、setuptools
Apr 20 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
python通过微信发送邮件实现电脑关机
Jun 20 Python
python绘制直线的方法
Jun 30 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
python 用下标截取字符串的实例
Dec 25 Python
python 有效的括号的实现代码示例
Nov 11 Python
pandas的resample重采样的使用
Apr 24 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 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各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
老生常谈js数据类型
2017/08/03 Javascript
webpack多页面开发实践
2017/12/18 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
python利用beautifulSoup实现爬虫
2014/09/29 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
华润集团网上药店:健一网
2016/09/19 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
三下乡活动方案
2014/01/31 职场文书
质量承诺书范文
2014/03/27 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
Python实现双向链表
2022/05/25 Python