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安装路径以及安装包路径小技巧
Apr 28 Python
在Django中编写模版节点及注册标签的方法
Jul 20 Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 Python
Python实现两款计算器功能示例
Dec 19 Python
Python实现购物车程序
Apr 16 Python
详解python中init方法和随机数方法
Mar 13 Python
Python面向对象之类和实例用法分析
Jun 08 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
django实现模型字段动态choice的操作
Apr 01 Python
keras中的loss、optimizer、metrics用法
Jun 15 Python
Django前后端分离csrf token获取方式
Dec 25 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
咖啡与牛奶
2021/03/03 冲泡冲煮
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
利用python求相邻数的方法示例
2017/08/18 Python
Python中类的初始化特殊方法
2017/12/01 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
python3中rank函数的用法
2019/11/27 Python
如何使用python切换hosts文件
2020/04/29 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
小学体育教学反思
2014/01/31 职场文书
部队万能检讨书
2014/02/20 职场文书
学徒工职责
2014/03/06 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL