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脚本爬取字体文件的实现方法
Apr 29 Python
python之PyMongo使用总结
May 26 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Python绘制七段数码管实例代码
Dec 20 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
详解分布式任务队列Celery使用说明
Nov 29 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
Jun 02 Python
python 调用Google翻译接口的方法
Dec 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
php上的memcache和memcached两个pecl库
2010/03/29 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
关于php中一些字符串总结
2016/05/05 PHP
浅谈PHP的反射API
2017/02/26 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
javascript的delete运算符知识点总结
2019/11/19 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
JavaScript canvas绘制折线图
2020/02/18 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[04:13]2014DOTA2国际邀请赛 专访DC目前形势不容乐观
2014/07/12 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
python打包成so文件过程解析
2019/09/28 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
通信研究生自荐信
2014/02/01 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
开发房地产协议书
2014/09/14 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书