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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
python通过post提交数据的方法
May 06 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
Jul 02 Python
python清除函数占用的内存方法
Jun 25 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
Python求平面内点到直线距离的实现
Jan 19 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Python爬虫与反爬虫大战
Jul 30 Python
Python字典实现伪切片功能
Oct 28 Python
Pycharm 解决自动格式化冲突的设置操作
Jan 15 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/06 新手入门
php处理斐波那契数列非递归方法
2012/02/04 PHP
php实现的通用图片处理类
2015/03/24 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
Python 自动刷博客浏览量实例代码
2017/06/14 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python线程创建和终止实例代码
2018/01/20 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
使用css创建三角形 使用CSS3创建3d四面体原理及代码(html5实践)
2013/01/06 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
哪些情况下不应该使用索引
2015/07/20 面试题
淘宝客服专员岗位职责
2014/04/11 职场文书
心理健康日活动总结
2014/05/08 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang