python 链表的实现

code

#!/usr/bin/python
# -*- coding: utf-8 -*-
class Node(object):
    def __init__(self,val,p=0):
        self.data = val
        self.next = p
        self.prev = 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
            node.prev  = p
            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
            q.prev = p

    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.prev = post
            q.next = p
            p.prev = q

    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
            p.next.prev = post

    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)

print(l.index(40))

输出

5
6
4
40
5
6
4

https://www.jb51.net/article/43559.htm

原文地址:https://www.cnblogs.com/sea-stream/p/11216575.html

时间: 2024-07-30 20:15:57

python 链表的实现的相关文章

【Python】python链表应用源码示例

python链表应用源码示例,需要用到python os模块方法.函数和类的应用. 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. python链表应用源码示例如下: #-*-coding:utf8 -*- import os class Head_List: def __init__(self , id): self.id = id self.next = -1 self.length = 0 def s

Python链表操作(实现)

Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特点,以及链表的一些常见操作给大家做一个深入浅出的讲解,希望本文的读者能够掌握链表的操作. 1. 什么是链表? 简单地说,链表是一种无序的列表.你可以把链表里面的数据看成是随机排列的,元素之间并没有固定的先后顺序.所以,既然是无序的,那么我们就无法像操作list对象一样简单地用index来去定位和操作

python 链表

在C/C++中,通常采用"指针+结构体"来实现链表:而在Python中,则可以采用"引用+类"来实现链表. 节点类: class Node: def __init__(self, data): self.data = data self.next = None 链表类: class Linkedlist: def __init__(self): self.head = None self.tail = Nonelink_list = LinkedList() def

python 链表的反转

code #!/usr/bin/python # -*- coding: utf-8 -*- class ListNode: def __init__(self,x): self.val=x self.next=None def recurse(head,newhead): #递归,head为原链表的头结点,newhead为反转后链表的头结点 if head is None: return if head.next is None: newhead=head else : newhead=rec

python链表

一 简介 1 链表简介 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间

python 链表实现 双向链表

1.  双向链表的定义   每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值:而另一个指向下一个节点,当此节点为最后一个节点时,指向空值. 2.  操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, item) 指定位置添加 remove(item) 删除节点 search(item) 查找节点是否存在 3.  实现 class

Python面试重点(基础篇)

Python面试重点(基础篇) 第一部分 必答题 简述列举了解的编程语言及语言间的区别? pythonjavacc++c#gophp----------------------------------------------------------------编程语言分为解释型和编译型: 解释型语言:   python 在编写代码的时候不需要编译,在执行的时候,想要用专用的解释器对代码进行编译,全部编译后,才能执行代码 编译型语言:   c c++   go 每写一行代码,解释器就会编译一行,然

面试记录留给自己做纪念

新浪:java/python 1.安卓怎么测试.专项测试关注那些. 2.app安全怎么测试 3.jmeter怎么自定义协议,分布式怎么部署 4.jvm原理.算法.垃圾算法有几种,怎么在tomcat中修改参数 5.HashMap有几种遍历.java集合分几种,有什么不同 6.性能测试中怎么定位问题.怎么解决问题.如果有内存泄漏怎么定位.java线程堆栈怎么分析: 7.性能测试流程是什么?如何开展性能测试 性能报告怎么写,包含什么 旷视:(python) 1.一个文件夹中有100万图片.文件夹.其他

python数据结构链表之单向链表

本文和大家分享的主要是python中单向链表相关内容,一起来看看吧,希望对大家学习python有所帮助. 单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. . 表元素域elem用来存放具体的数据. . 链接域next用来存放下一个节点的位置(python中的标识) . 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点. 节点实现 class