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 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
Python单例模式实例分析
Jan 14 Python
Python封装shell命令实例分析
May 05 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
python让列表倒序输出的实例
Jun 25 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
Python bisect模块原理及常见实例
Jun 17 Python
Django视图、传参和forms验证操作
Jul 15 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
python如何实现图片压缩
Sep 11 Python
python 实现一个图形界面的汇率计算器
Nov 09 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
php继承的一个应用
2011/09/06 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
php生成excel列序号代码实例
2013/12/24 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python实现文本文件合并
2015/12/29 Python
python Django批量导入数据
2016/03/25 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
英文求职信结束语大全
2013/10/26 职场文书
个人自我评价范文
2014/02/05 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
学生操行评语大全
2014/04/24 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
高中综合实践活动总结
2014/07/07 职场文书
学校食堂标语
2014/10/06 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python