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和libnmapd,提取Nmap扫描结果
Aug 23 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
Django 自定义分页器的实现代码
Nov 24 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
Django模板获取field的verbose_name实例
May 19 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
python为什么要安装到c盘
Jul 20 Python
django教程如何自学
Jul 31 Python
python 基于UDP协议套接字通信的实现
Jan 22 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
php中的观察者模式
2010/03/24 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
载入进度条 效果
2006/07/08 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
jQuery超酷平面式时钟效果代码分享
2020/03/30 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
Python编程之多态用法实例详解
2015/05/19 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
自我鉴定写作要点
2014/01/17 职场文书
元旦联欢会感言
2014/03/04 职场文书
班主任评语大全
2014/04/26 职场文书
爱护草坪标语
2014/06/24 职场文书
职工小家建设活动方案
2014/08/25 职场文书
教师自我剖析材料
2014/09/29 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
学习党章的体会
2014/11/07 职场文书
辞职信格式范文
2015/05/13 职场文书
最美乡村教师观后感
2015/06/11 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python