Python数据结构

一、栈

         栈(Stack)是一种线性数据结构,它遵循后进先出(LIFO)的原则。这意味着最后一个被添加到栈中的元素将是第一个被移除的元素。

        举一些生活中的例子:枪里的子弹(最后进入弹夹的子弹会被第一个发射出去),往一个箱子放入书籍(只能先取出最上面的书籍,无法直接从最下面拿出),洗盘子(后洗的盘子会被放在最上面)等等。

        Python并没有内置好的栈供我们使用,如果要使用栈这个数据结构,我们需要自己去构建,一般的构建方法就是利用列表(List)搭配类。以下是现实栈的代码:

# 使用列表作为存储栈的容器
class Stack:
    # 创建空栈
    def __init__(self):
        self.stack = []

    # 向栈中输入数据
    def push(self, item):
        self.stack.append(item)

    # 删除顶端数据(返回被删除元素)
    def pop(self):
        return self.stack.pop()

    # 获取顶端数据(最后进入的元素)
    def peek(self):
        return self.stack[-1]

    # 判断栈是否为空
    def is_empty(self):
        return not bool(self.stack)
    
    # 获取栈的长度
    def size(self):
        return len(self.stack)

        从上面这段代码中不难发现,栈的实现基本就是使用了列表来存储数据,以及使用列表的各种方法来对这些数据进行操作。那么既然能直接用列表来实现,那为什么还要专门去搭配类来使用?你们或许会有这样的疑问。

        首先,列表也算是一个数据结构(属于是Python内置的),并且有着自己的实例方法(pop,append等等)。但是这些实例方法在大部分的书籍或者是老师的讲解下,都被称作为函数,这其实是完全不正确的。在刚开始学习Python的函数时,你可能就注意到了。有的函数需要接收一些参数(len,max,min等等),而有的函数则需要通过 ' . ' 这个符号来使用(前面提到的pop,append等等)。在你学习了类的创建与使用后,你就会发现,这正是实例方法的调用方式。

        不仅是列表,其它的数据容器(字符串,元组,集合,字典)都和列表一样,是Python中内置的最基本的数据结构,并且有着自己的实例方法。

        而我们的栈,并非Python内置的数据结构,虽然可以直接用列表实现。但是,列表不符合栈的某些条件(先进后出),如果你单单使用列表去实现栈,你仍然可以直接删除第一个进入的元素(这样就打破了栈的基本原则)。而类具有封装性,我们将列表放入类中来存储栈,并创建栈的专属实例方法,那么创建好的新类,虽然它依然使用的列表存储数据,但你无法使用列表的实例方法去对它进行操作。这样一来就保证最后进入的元素第一个被删除,最先进入的元素最后被删除。遵守了栈的基本原则。

        

         可以看到,我们用列表的实例方法append往栈中添加新的元素,编译报错了,提示的大概意思是在Stack类(我们创建的数据结构栈)中没有append这个实例方法。

        在后面实现其它数据结构时也是如此,基本都是通过类来实现。

(今天先更到这......)

二、队列

三、链表

四、树

五、图

六、堆

七、并查集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值