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 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
python入门教程之识别验证码
Mar 04 Python
老生常谈python函数参数的区别(必看篇)
May 29 Python
python实现二叉树的遍历
Dec 11 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python格式化输出%s和%d
May 07 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
Python 下载Bing壁纸的示例
Sep 29 Python
教你用python实现12306余票查询
Jun 30 Python
Python实现简单的俄罗斯方块游戏
Sep 25 Python
分享提高 Python 代码的可读性的技巧
Mar 03 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技术开发技巧分享
2010/03/23 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
微信API接口大全
2015/04/15 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
python 图片验证码代码
2008/12/07 Python
python单链表实现代码实例
2013/11/21 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python模拟三级菜单效果
2017/09/11 Python
python正则表达式面试题解答
2020/04/28 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
机电一体化自荐信
2013/12/10 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
财务人员担保书
2014/05/13 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
岳庙导游词
2015/02/04 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
暑假生活随笔
2015/08/15 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python