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自动生成文章
Dec 25 Python
python通过ftplib登录到ftp服务器的方法
May 08 Python
Python解析nginx日志文件
May 11 Python
利用Python实现命令行版的火车票查看器
Aug 05 Python
Tensorflow简单验证码识别应用
May 25 Python
Python实现程序判断季节的代码示例
Jan 28 Python
python使用flask与js进行前后台交互的例子
Jul 19 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
python爬虫实现获取下一页代码
Mar 13 Python
python高级特性简介
Aug 13 Python
Django生成数据库及添加用户报错解决方案
Oct 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
php stripslashes和addslashes的区别
2014/02/03 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
Thinkphp整合微信支付功能
2016/12/14 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
PyQt5每天必学之进度条效果
2018/04/19 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python 读取.nii格式图像实例
2020/07/01 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
行政管理专业推荐信
2013/11/02 职场文书
初中三年学生的学习自我评价
2013/11/13 职场文书
环保建议书
2014/03/12 职场文书
小学语文课后反思精选
2014/04/25 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
故意杀人案辩护词
2015/05/21 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
R9700摩机记
2022/04/05 无线电
python实现学员管理系统(面向对象版)
2022/06/05 Python