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 08 Python
python中的错误处理
Apr 10 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python 装饰器使用详解
Jul 29 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
Python3实现腾讯云OCR识别
Nov 27 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
Python基于Tkinter编写crc校验工具
May 06 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
python excel和yaml文件的读取封装
Jan 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
php获取url参数方法总结
2014/11/13 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
跟老齐学Python之用Python计算
2014/09/12 Python
Python二分法搜索算法实例分析
2015/05/11 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
电子信息科学专业自荐信
2014/01/30 职场文书
小学教师听课制度
2014/02/01 职场文书
安全协议书
2014/04/23 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
Golang获取List列表元素的四种方式
2022/04/20 Golang