Python 数据结构的实现

前言

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

一.父类Struct

1.为什么要实现这个类

1.规定了数据结构这一基本概念,可以规范后面各种数据的一些基本函数和作用
2.为了好看(其实更多的是规范性)

2.代码

class Struct():
    def __len__(self):pass
    def __contains__(self,item):pass
    def Clear(self):pass
    def IsNull(self):pass

3.解释

len属性自然不必多说,数据结构是储存数据的,len可以内部获取数据量
contains实现于list的contains,也可以自己写搜索算法
Clear函数用于清空
IsNull判断是否为空

二.栈Stack

1.栈的定义

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2.代码

import Struct
class Stack(Struct.Struct):
    StackSpace=1024
    def __init__(self):
        self.__index=-1 #整数,指针
        self.__datas=[None]*Stack.StackSpace #数据池
    def __len__(self):
        if(self.__index<0):return 0
        else:return self.__index+1
    def __contains__(self,item):
        return self.__datas.__contains__(item)
    def IsNull(self):
        return self.__index<0      
    def Clear(self):
        self.__index=-1
        self.__datas.clear()

    def Push(self,obj):
        self.__index+=1
        self.__datas[self.__index]=obj
    def Pop(self):
        if(self.__index==-1):return False
        else:
            data=self.__datas[self.__index]
            del(self.__datas[self.__index])
        self.__index-=1
        return data
    def Top(self):
        if(self.__index==-1):return None
        else:return self.__datas[self.__index]

3.解释

1.Push函数用于压栈,而Python中list的特性注定了这个栈是个多类型的结构,对于压栈的数据是没有限制的,只不过初始StackSpace规定了栈的最大容量,事实上使用list.append来增加元素是一个更好的方案,但是StackSpace也起到了数据规范的作用
2.Pop函数用于退栈,并且返回退出的元素的值
3.Top函数用于获取栈顶元素

三.队列Queue

1.队列的定义

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

2.代码

import Struct
class Queue(Struct.Struct):
    QueueSpace=1024
    def __init__(self):
        self.__datas=[None]*Queue.QueueSpace
        self.__end=-1
    def __len__(self):
        if(self.__end<0):return 0
        else:
            return self.__end+1
    def __contains__(self, item):
        return self.__datas.__contains__(item)
    def IsNull(self):
        return self.__end<0
    def Clear(self):
        self.__datas=[None]*Queue.QueueSpace
        self.__end=-1

    def Add(self,obj):
        self.__end+=1
        self.__datas[self.__end]=obj
    def Delete(self):
        if(self.__end<0):return False
        data=self.__datas[0]
        del(self.__datas[0])  #删除该元素
        self.__end-=1  #移动尾索引
        return data
    def GetHead(self):
        if(self.__end<0):return None
        return self.__datas[0]

3.解释

1.Add函数类似于Stack里面的Push函数,但是有区别的是Queue里面的增加数据和删除数据的数据节点是不同的
2.Delete函数类似于Stack里面的Pop函数,但观察代码可以发现,增加的元素在末尾,删除的元素在首,而储存排列就在内存中不断前进
3.GetHead函数获取首元素,因为Delete函数中使用了内置的del函数,所有调用Delete函数后,self.__data[0]就是后一个元素所在的位置了

四.树Tree

1.树的定义

树是一种数据结构,它是由n(n≥1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。

2.代码

import Struct
class TreeNode(Struct.Struct):
    def __init__(self, value, son):
        self.__son = []
        self.__value = value
        for i in son:           
            self.__son.append(i)

    def __len__(self):
        tmp = TreeNode.GetAllNode(self)
        return len(tmp)

    def __contains__(self, item):
        tmp = TreeNode.GetAllNode(self)
        return tmp.__contains__(item)


    def IsNull(self):
        return len(self.__son) == 0

    def Clear(self):
        self.__son = []

    def AddSon(self, obj):
        self.__son.append(obj)

    def DeleteSon(self, obj):
        self.__son.remove(obj)

    def GetSon(self):
        return self.__son

    def GetValue(self):
        return self.__value

    def GetFirstSon(self):
        if (len(self.__son) == 0):
            return None
        else:
            return self.__son[0]

    def GetLastSon(self):
        if (len(self.__son) == 0):
            return None
        else:
            return self.__son[len(self.__son) - 1]

    def GetAllNode(point):
        all = []
        if (len(point.GetSon()) == 0):
            all.append(point)
            return all
        else:
            all.append(point)
            for i in point.GetSon():
                for j in TreeNode.GetAllNode(i):
                    all.append(j)
        return all

    def GetAllLeaf(point):
        all = []
        if (len(point.GetSon()) == 0):
            all.append(point)
            return all
        else:
            for i in point.GetSon():
                for j in TreeNode.GetAllLeaf(i):
                    all.append(j)
        return all

3.解释

1.AddSon函数调用时可以为该节点增加一个指定的子节点
2.GetSon函数用于获取该节点的所有子节点
3.GetValue函数用于获取该节点的权值
4.GetFirstSon函数用于获取添加的第一个子节点
5.GetLastSon函数用于获取添加的最后一个子节点
6.静态函数GetAllNode,递归获取所有的子节点
7.静态函数GetAllLeaf,递归获取所有的子叶节点

------更多内容持续更新中------

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中,数据结构实现是非常重要的。尽管Python本身是用C实现的,速度和效率相对较低,因此与其他编程语言相比,Python数据结构和算法的重视程度可能较低。Python最引以为傲的是其功能强大和丰富的库和模块。对于许多像您一样的新手来说,时间复杂度似乎并不是一个硬性要求,只要能实现功能就可以了。 Python中可以使用各种数据结构,比如栈和队列。栈和队列是常见的数据结构,它们分别具有后进先出和先进先出的特点。在Python中,我们可以使用列表来模拟栈和队列的行为。列表提供了丰富的方法来添加、删除和访问元素,可以轻松实现栈和队列的功能。 除了使用列表,Python还提供了一些内置的数据结构,如堆、集合和字典,可以根据具体需求选择合适的数据结构实现功能。 总结来说,Python实现数据结构的方法有很多种,可以使用列表、内置数据结构或自定义数据结构来满足不同的需求。在实际编程中,可以根据任务的复杂程度和性能要求选择合适的数据结构来提高代码的效率和可读性。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python 数据结构篇](https://blog.csdn.net/qq_62047219/article/details/125618390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python 实现数据结构中的的栈队列](https://download.csdn.net/download/weixin_38616139/12863051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纸墨青鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值