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的Flask框架下使用sqlalchemy库的简单教程
Apr 09 Python
详解Python爬虫的基本写法
Jan 08 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
Python解析json时提示“string indices must be integers”问题解决方法
Jul 31 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Python中实现输入一个整数的案例
May 03 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 Python
如何获取numpy array前N个最大值
May 14 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
PHP5中MVC结构学习
2006/10/09 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
Javascript 对象的解释
2008/11/24 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
axios 处理 302 状态码的解决方法
2018/04/10 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
python列表返回重复数据的下标
2020/02/10 Python
Python API len函数操作过程解析
2020/03/05 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
学生打架检讨书大全
2014/01/23 职场文书
关于迟到的检讨书
2014/01/26 职场文书
高三自我评价
2014/02/01 职场文书
黄河的主人教学反思
2014/02/07 职场文书
小学生优秀评语大全
2014/04/22 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
初中优秀学生评语
2014/12/29 职场文书