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标准异常和异常处理详解
Feb 02 Python
Python中正则表达式的详细教程
Apr 30 Python
详解Python中用于计算指数的exp()方法
May 14 Python
Python实现分割文件及合并文件的方法
Jul 10 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
Django中使用Celery的教程详解
Aug 24 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
python sqlite的Row对象操作示例
Sep 11 Python
python实现简单颜色识别程序
Feb 19 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 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语法速查表
2006/12/06 PHP
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
用Python进行TCP网络编程的教程
2015/04/29 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
Django csrf 两种方法设置form的实例
2019/02/03 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
final, finally, finalize的区别
2012/03/01 面试题
大学毕业感言一句话
2014/02/06 职场文书
预备党员半年考察意见
2015/06/01 职场文书
民主生活会意见
2015/06/05 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫