python单链表实现代码实例


Posted in Python onNovember 21, 2013

链表的定义:
链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。

python单链表实现代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
class Node(object):
    def __init__(self,val,p=0):
        self.data = val
        self.next = 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
            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

    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.next = p

    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
    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中super()函数简介及用法分享
Jul 11 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
Python函数返回不定数量的值方法
Jan 22 Python
python中break、continue 、exit() 、pass终止循环的区别详解
Jul 08 Python
WxPython实现无边框界面
Nov 18 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
python中append函数用法讲解
Dec 11 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
总结一些js自定义的函数
2006/08/05 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
移动节点的jquery代码
2014/01/13 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
python函数形参用法实例分析
2015/08/04 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
兰蔻俄罗斯官方网站:Lancome俄罗斯
2019/12/09 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
买房协议书
2014/04/11 职场文书
毕业实习计划书
2015/01/16 职场文书
教师节座谈会主持词
2015/07/03 职场文书
运动会加油稿50字
2015/07/21 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
Python机器学习三大件之一numpy
2021/05/10 Python