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之集合的关系
Sep 24 Python
python添加模块搜索路径方法
Sep 11 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
Python中常用的8种字符串操作方法
May 06 Python
python二进制文件的转译详解
Jul 03 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
python中必要的名词解释
Nov 20 Python
django框架forms组件用法实例详解
Dec 10 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
Python使用windows设置定时执行脚本
Nov 12 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
django中的ajax组件教程详解
2018/10/18 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
js function使用心得
2010/05/10 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
React实现轮播效果
2020/08/25 Javascript
python中sys.argv函数精简概括
2018/07/08 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
Python 自由定制表格的实现示例
2020/03/20 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
Born鞋子官网:Born Shoes
2017/04/06 全球购物
新三好学生主要事迹
2014/01/23 职场文书
父母对孩子的寄语
2014/04/09 职场文书
初中学生评语大全
2014/04/24 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
政风行风整改方案
2014/10/25 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
母亲节感言
2015/08/03 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书