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实现的二叉树算法和kmp算法实例
Apr 25 Python
Python使用MONGODB入门实例
May 11 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
对python判断ip是否可达的实例详解
Jan 31 Python
Python3最长回文子串算法示例
Mar 04 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
Python下载的11种姿势(小结)
Nov 18 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/11 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
2017/07/19 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
一道python走迷宫算法题
2018/01/22 Python
python ---lambda匿名函数介绍
2019/03/13 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python 自由定制表格的实现示例
2020/03/20 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
简短的公司员工自我评价分享
2013/11/13 职场文书
党员创先争优活动总结
2014/05/04 职场文书
团结演讲稿范文
2014/05/23 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
国际贸易实训总结
2015/08/03 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
关于nginx 实现jira反向代理的问题
2021/09/25 Servers