python双向链表实现实例代码


Posted in Python onNovember 21, 2013

示意图:
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 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)

结果为;

5
6
4
40
5
6

和单链表结果一样。

Python 相关文章推荐
简单介绍Python中的struct模块
Apr 28 Python
总结Python编程中三条常用的技巧
May 11 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
python numpy 按行归一化的实例
Jan 21 Python
python内存管理机制原理详解
Aug 12 Python
python+rsync精确同步指定格式文件
Aug 29 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
python二叉树遍历的实现方法
Nov 21 #Python
python二叉树的实现实例
Nov 21 #Python
python冒泡排序算法的实现代码
Nov 21 #Python
python选择排序算法的实现代码
Nov 21 #Python
python插入排序算法的实现代码
Nov 21 #Python
python快速排序代码实例
Nov 21 #Python
python二分法实现实例
Nov 21 #Python
You might like
杏林同学录(四)
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
php利用header函数下载各种文件
2016/08/24 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
javascript各种复制代码收集
2008/09/20 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
Django 框架模型操作入门教程
2019/11/05 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
结构工程研究生求职信
2013/10/13 职场文书
幼儿园长自我鉴定
2013/10/17 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
村委会贫困证明范本
2014/09/17 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
阿凡达观后感
2015/06/10 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
导游词之镇江焦山
2019/11/21 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
Python利用FlashText算法实现替换字符串
2022/03/31 Python