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 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
python操作字典类型的常用方法(推荐)
May 16 Python
详解python的数字类型变量与其方法
Nov 20 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
python简单贪吃蛇开发
Jan 28 Python
Python完成毫秒级抢淘宝大单功能
Jun 06 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
Python3搭建http服务器的实现代码
Feb 11 Python
python tkinter Entry控件的焦点移动操作
May 22 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实现用户在线时间统计详解
2011/10/08 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
Convert Seconds To Hours
2007/06/16 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python requests 测试代理ip是否生效
2018/07/25 Python
一百多行python代码实现抢票助手
2018/09/25 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
专营店会计助理岗位职责
2013/11/29 职场文书
大学生志愿者感言
2014/01/15 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
中秋晚会致辞
2015/07/31 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
linux目录管理方法介绍
2022/06/01 Servers
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers