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编写暴力破解FTP密码小工具
Nov 19 Python
Python映射拆分操作符用法实例
May 19 Python
python处理大数字的方法
May 27 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
python发送邮件功能实现代码
Jul 15 Python
Python文件的读写和异常代码示例
Oct 31 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
python对XML文件的操作实现代码
Mar 27 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
Python.append()与Python.expand()用法详解
2019/12/18 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
国际贸易专业推荐信
2013/11/15 职场文书
语文教学随笔感言
2014/02/18 职场文书
家长学校实施方案
2014/03/15 职场文书
内勤主管岗位职责
2014/04/03 职场文书
护理专业求职信
2014/06/15 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
初中优秀学生评语
2014/12/29 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis
Python面向对象之内置函数相关知识总结
2021/06/24 Python
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python