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字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python制作刷网页流量工具
Apr 23 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
python修改txt文件中的某一项方法
Dec 29 Python
pycharm修改file type方式
Nov 19 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
Python定义一个函数的方法
Jun 15 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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中cookie的作用域
2008/03/27 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
浅析js封装和作用域
2013/07/09 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
OpenCV 边缘检测
2019/07/10 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
jupyter notebook实现显示行号
2020/04/13 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
Python之多进程与多线程的使用
2021/02/23 Python
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
广播体操比赛口号
2014/06/10 职场文书
批评与自我批评总结
2014/10/17 职场文书
2014年共青团工作总结
2014/12/10 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
小学副班长竞选稿
2015/11/21 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
python实现图片批量压缩
2021/04/24 Python