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 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
Python实现的下载网页源码功能示例
Jun 13 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
Python遍历pandas数据方法总结
Feb 09 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
python入门之基础语法学习笔记
Feb 08 Python
Python3标准库之dbm UNIX键-值数据库问题
Mar 24 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
python新手学习使用库
Jun 11 Python
python小技巧——将变量保存在本地及读取
Nov 13 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
我的论坛源代码(十)
2006/10/09 PHP
php二维码生成
2015/10/19 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
使用jquery为table动态添加行的实现代码
2011/03/30 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
vue插槽slot的理解和使用方法
2019/04/03 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
CentOS7安装Python3的教程详解
2019/04/10 Python
python 字符串常用函数详解
2019/09/11 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python远程方法调用实现过程解析
2020/07/28 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
海飞丝广告词
2014/03/20 职场文书
《假如》教学反思
2014/04/17 职场文书
青年文明号口号
2014/06/17 职场文书
应届生自荐书
2014/06/23 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
深入理解python协程
2021/06/15 Python
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
python中urllib包的网络请求教程
2022/04/19 Python