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的Django框架中simple-todo工具的简单使用
May 30 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
对Python中9种生成新对象的方法总结
May 23 Python
解决python报错MemoryError的问题
Jun 26 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
详解django中使用定时任务的方法
Sep 27 Python
Django基础知识 web框架的本质详解
Jul 18 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
python import 上级目录的导入
Nov 03 Python
python中pickle模块浅析
Dec 29 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP语法速查表
2006/12/06 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php目录拷贝实现方法
2015/07/10 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
Js+XML 操作
2006/09/20 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
Python3 Random模块代码详解
2017/12/04 Python
Python遍历numpy数组的实例
2018/04/04 Python
django框架自定义用户表操作示例
2018/08/07 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
全球在线商店:BerryLook
2019/04/14 全球购物
统计员岗位职责
2013/11/14 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
教师评语大全
2014/04/28 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js