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操作mongodb根据_id查询数据的实现方法
May 20 Python
python爬虫爬取某站上海租房图片
Feb 04 Python
Random 在 Python 中的使用方法
Aug 09 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
Python简单I/O操作示例
Mar 18 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
关于Theano和Tensorflow多GPU使用问题
Jun 19 Python
python中的django是做什么的
Jul 31 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 Python
Python Numpy之linspace用法说明
Apr 17 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
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
如何使用PHP计算上一个月的今天
2013/05/23 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
window.open的功能全解析
2006/10/10 Javascript
js 窗口抖动示例
2013/09/04 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
jQuery的框架介绍
2016/05/11 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
python3简单实现微信爬虫
2015/04/09 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Python sys模块常用方法解析
2020/02/20 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
音乐学个人的自荐书范文
2013/11/26 职场文书
零件设计自荐信范文
2013/11/27 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
中学生自我评价范文
2014/02/08 职场文书
初三学生个人自我评定
2014/04/06 职场文书
企业员工薪酬方案
2014/06/04 职场文书
七夕活动策划方案
2014/08/16 职场文书
男方婚礼答谢词
2015/01/20 职场文书
客户经理岗位职责
2015/01/31 职场文书
童年读书笔记
2015/06/26 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书