python栈和队列

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、栈和队列的概念

1、栈

2、队列

二、python中的LifoQueue(其实也是所谓的后进先出队列)和list列表

三、python自行搭建栈

1、初始化

2、判断栈是否为空

3、进栈

4、出栈

5、栈的长度

6、输出栈顶元素但不弹出

7、具体调用

三、python中的Queue

四、python自行搭建队列

1、初始定义

2、判断队列是否为空

3、输出队列长度

4、入队

5、出队

6、获取队首元素

7、具体调用


一、栈和队列的概念

1、栈

简单来说,栈也是线性表的一种。它只允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

进栈:向一个栈插入新元素,它是把新元素放到栈顶元素的上面,变成新的栈顶元素;

出栈:从一个栈删除元素,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2、队列

队列也是一种一种线性表。

特点:

(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。

(2)在队尾添加元素,在队头删除元素。


二、python中的LifoQueue(其实也是所谓的后进先出队列)和list列表

python具有实现栈的数据结构,是queue库中的LifoQueue。接下来让我们来看看它的几个相关应用。

from queue import LifoQueue

stack = LifoQueue() 
for i in range(5):
    stack.put(i) #进栈

for i in range(5):
    print(stack._get()) #出栈

首先从queue库中导入LifoQueue,put(data)是进栈,_get()是出栈。

此外队列除了传统的先进先出,还有先进后出(就类似栈),还有优先级队列(PriorityQueue),他们都是从先进先出改进而来的。

当然最简单的就是直接用列表啦~

a = [1,2,3]
a.pop()#出栈
a.append(4)#入栈

三、python自行搭建栈

1、初始化

class Stack:
    def __init__(self):
        self.data = []

2、判断栈是否为空

    def isEmpty(self): #判断栈是否为空
        return not self.data

3、进栈

    def push(self,data): #进栈
        self.data.append(data)

4、出栈

    def pop(self): #弹出栈顶元素(出栈)
        return self.data.pop()

5、栈的长度

    def size(self): #输出栈的大小
        return len(self.data)

6、输出栈顶元素但不弹出

    def searchtop(self): #输出栈顶元素(但未弹出)
        return self.data[-1]

7、具体调用

stack = Stack()
for i in range(5):
    stack.push(i)
print(stack.size())
print(stack.searchtop())
for i in range(5):
    print(stack.pop())
print(stack.isEmpty())

三、python中的Queue

python具有实现栈的数据结构,是queue库中的Queue。

首先我们从queue库中调用Queue

from queue import Queue
q = Queue()

然后很遗憾,开始报错

cannot import name 'Queue' from partially initialized module 'queue' (most likely due to a circular import)

后来发现原来是因为我把文件名定义成queue.py的缘故,和queue库重名了,所以换个文件件名就没事了。

for i in range(5):
    q.put(i)
for i in range(5):
    print(q.get())

和LifoQueue类似的,put(data)入队,get()出队


四、python自行搭建队列

1、初始定义

class Queuepy:
    def __init__(self):
        self.queue = []

2、判断队列是否为空

    def isEmpty(self): #判断队列是否为空
        return not self.queue

3、输出队列长度

    def size(self): #输出队列长度
        return len(self.queue)

4、入队

    def joinqueue(self,data): #入队(队尾)
        self.queue.append(data)

5、出队

    def outofqueue(self): #出队(队头)
        l = len(self.queue)
        if l == 0:
            print("The queue is None")
        else:
            a = self.queue[0]
            q = []
            for i in range(l-1):
                q.append(self.queue[i+1])
            self.queue = q
            return a

6、获取队首元素

    def getleader(self): #获取队头
        return self.queue[0]

7、具体调用

k = Queuepy()
for i in range(5):
    k.joinqueue(i)
print(k.isEmpty())
print(k.size())
print(k.getleader())
for i in range(5):
    print(k.outofqueue())
print(k.isEmpty())

欢迎大家在评论区批评指正,谢谢大家~

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tt丫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值