python——python 数据结构之双向链表的实现

和单链表类似,只不过是增加了一个指向前面一个元素的指针而已。

示意图:

python 实现代码:

#Personal Python Data Structure--PPDS
#
#!/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 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):
        length = 0
        p =  self.head
        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
        j = 0
        p = self.head
        post  = self.head
        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
        j = 0
        p = self.head
        post  = self.head
        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
        i = 0
        p = self.head
        while p.next != 0 and not p.data == value:
            p = p.next
            i+=1
        if p.data == value:
            return i
        else:
            return -1

if __name__ == ‘__main__‘:
    l=LinkList()
    llist=[7,3,10,4,5,]
    l.initlist(llist)

    print(l.getlength())
    print(l.is_empty())

    # l.append(11)
    # l.insert(2,100)

    print(l.getlength())
    print(l.getitem(0))
    for i in range(l.getlength()):
        print(l.index(llist[i]))
    l.clear()
    print(l.getlength())
时间: 2024-07-30 20:15:58

python——python 数据结构之双向链表的实现的相关文章

python 常用数据结构使用

python 字典排序 http://www.cnblogs.com/kaituorensheng/archive/2012/08/07/2627386.html 函数原型 sorted(dic,value,reverse) dic为比较函数,value 为排序的对象(这里指键或键值), reverse:注明升序还是降序,True--降序,False--升序(默认) 案例 dic = {'a':3 , 'b':2 , 'c': 1} 注意 排序之后原字典没有变,顺序依旧 python 常用数据结

python基本数据结构序列

python基本数据结构序列 ,六种内建序列类型:列表 元组字符串  Unicode字符串  buff对象和xrange对象 序列通用操作: 索引:元素的编号是从 0开始的 到索引号为负数时 查找方式是从右到左的 索引写在[]中 分片:类似索引的操作可以指定范围,当为一个对象创造副本时可以用 b = a[:] 这样的形式创建,这样 当 a被操作时不会影响 b  因为他们指向的不是同一块区域 相加:表示连接操作,列表连接后是新的列表不能改变列表原有的结构,序列相加时候要同种类型  进行,否则会报

用Python实现数据结构之二叉搜索树

二叉搜索树 二叉搜索树是一种特殊的二叉树,它的特点是: 对于任意一个节点p,存储在p的左子树的中的所有节点中的值都小于p中的值 对于任意一个节点p,存储在p的右子树的中的所有节点中的值都大于p中的值 一个图例: 基于二叉搜索树的这种关系,我们可以用它来实现有序映射 遍历二叉搜索树 基于二叉搜索树的特性,采用中序遍历的方式可以使得遍历结果是按照从小到大的顺序排列的.了解中序遍历可以参考用Python实现数据结构之树 这里还需要思考的一个内容是在基于中序遍历的前提下,如何求一个节点的后继节点或前驱节

python实现数据结构单链表

#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" def __init__(self, elem): self.elem = elem self.next = None # 节点一开始初始化的时候并不知道下一个元素的地址,所以先设置为空 class SingLinkList(object): """单链表""

Python.python学习(1).学习规划

Python.python学习.学习规划 欢迎收看! 阅读此文表明你也是要学Python这门神奇的语言了.很好,来对地方了,先容我简单介绍一下这个博客系列. 这个系列的博客将会持续专注于Python这个语言的知识积累和开发经验. 编写这个系列,一方面是为了巩固我自己对Python的理解,另一方面也是希望能够分享我的经验,给初学者提供一定帮助.网上现有的各类教程已经汗牛充栋,在我学习的时候就曾参阅过许多教程与文章,它们讲解问题的思路各不相同,综合的阅读使得我最终能够整理起知识的碎片并正确地理解.所

[python] python单元测试经验总结

python写单元大多数都会用到unittest和mock,测试代码覆盖率都会用到coverage,最后再用nose把所有的东西都串起来,这样每次出版本,都能把整个项目的单元测试都运行一遍. Unittest unittest就不详细介绍了,注意几点: 测试类继承unittest.TestCase 测试类.测试方法名字最好以test开头,很多工具能根据名字来自动运行,很方便 测试类里面的setUp/tearDown会在每个case执行之前/之后执行,setUpClass/tearDownClas

[python] python 中的&quot; &quot;和&#39; &#39;都是完全转义

dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"} for k in dict: print ("dict[$k] =",dict[k]) dict[$k] = grapedict[$k] = bananadict[$k] = appledi

[Python] python vs cplusplus

一些学习过程中的总结的两种语言的小对比,帮助理解OO programming. Continue... 字典 序列 --> 字典 Python: def get_counts(sequence): counts = {} for x in sequence: if x in counts: counts[x] += 1 else: counts[x] = 1 # 这是是硬伤,不优于c++,这里必须如此写 return counts c++:貌似没有这个问题. #include <iostrea

[Python] Python 调用 C 共享库

Linux/Unix 平台下共享库(Shared Library)文件后缀 .so:在 Windows 平台称为动态链接库(Dynamic Link Library),文件名后缀为 .dll. 利用 ctypes 模块调用 C 共享库 ctypes 是 Python 标准库提供的一个模块,Python 2.3 版本以上支持该模块.ctypes 是 Python 高级外部函数接口,Python 通过它可以调用 C 语言编译的静态链接库和动态链接库.ctypes 支持多个平台,包括 Windows,

[零基础学python]python中的四则运算

一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer.不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等.乃至于,有的人在口语中区分不开计算机和计算器. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列为肯定过关了. 复习 还是先来重温一下伟大时刻,打印hello world. 打开电脑,让python idle运行起来,然后输入: >>> print 'Hello, World' Hello, World