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迭代器实例简析
Sep 25 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
python保存网页图片到本地的方法
Jul 24 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
Python实现图像的垂直投影示例
Jan 17 Python
python定义类self用法实例解析
Jan 22 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
在python3.9下如何安装scrapy的方法
Feb 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 csv操作类代码
2009/12/14 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
node.js require() 源码解读
2015/12/13 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
Python unittest框架操作实例解析
2020/04/13 Python
python如何实时获取tcpdump输出
2020/09/16 Python
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
致100米运动员广播稿
2014/02/14 职场文书
《问银河》教学反思
2014/02/19 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
学前班评语大全
2014/05/04 职场文书
2014年党务公开方案
2014/05/08 职场文书
室内趣味活动方案
2014/08/24 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
运动会200米广播稿
2015/08/19 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript