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每隔N秒运行指定函数的方法
Mar 16 Python
Python编写电话薄实现增删改查功能
May 07 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 Python
PyQt5每天必学之进度条效果
Apr 19 Python
python os用法总结
Jun 08 Python
Python实现Linux监控的方法
May 16 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
python numpy数组中的复制知识解析
Feb 03 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
python如何运行js语句
Sep 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
用libtemplate实现静态网页生成
2006/10/09 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP 文件上传限制问题
2019/09/01 PHP
php实例化一个类的具体方法
2019/09/19 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
无阻塞加载脚本分析[全]
2011/01/20 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Django时区详解
2019/07/24 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
python dict乱码如何解决
2020/06/07 Python
python能在浏览器能运行吗
2020/06/17 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
html5 视频播放解决方案
2016/11/06 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
MySQL面试题
2014/01/12 面试题
数学专业毕业生自荐信
2013/11/10 职场文书
业务助理岗位职责
2013/11/18 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
申报材料格式
2014/12/30 职场文书
大学学生会竞选稿
2015/11/19 职场文书
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
python自动化八大定位元素讲解
2021/07/09 Python