当前位置: 首页 > news >正文

Python使用列表实现栈、队列学习记录

将列表当做栈使用

在 Python 中,可以使用列表(list)来实现栈的功能。栈是一种后进先出(LIFO, Last-In-First-Out)数据结构,意味着最后添加的元素最先被移除。列表提供了一些方法,使其非常适合用于栈操作,特别是 append() 和 pop() 方法。

用 append() 方法可以把一个元素添加到栈顶,用不指定索引的 pop() 方法可以把一个元素从栈顶释放出来。

栈操作

  • 压入(Push): 将一个元素添加到栈的顶端。
  • 弹出(Pop): 移除并返回栈顶元素。
  • 查看栈顶元素(Peek/Top): 返回栈顶元素而不移除它。
  • 检查是否为空(IsEmpty): 检查栈是否为空。
  • 获取栈的大小(Size): 获取栈中元素的数量。

以下是如何在 Python 中使用列表实现这些操作的详细说明:

1、创建一个空栈

stack = []

2、压入(Push)操作

使用 append() 方法将元素添加到栈的顶端:

stack.append(1)
stack.append(2)
stack.append(3)
print(stack)  # 输出: [1, 2, 3]

3、弹出(Pop)操作

使用 pop() 方法移除并返回栈顶元素:

top_element = stack.pop()
print(top_element)  # 输出: 3
print(stack)        # 输出: [1, 2]

4、查看栈顶元素(Peek/Top)

直接访问列表的最后一个元素(不移除):

top_element = stack[-1]
print(top_element)  # 输出: 2

5、检查是否为空(IsEmpty)

检查列表是否为空:

is_empty = len(stack) == 0
print(is_empty)  # 输出: False

6、获取栈的大小(Size)

使用 len() 函数获取栈中元素的数量:

size = len(stack)
print(size)  # 输出: 2

使用列表(Python中的列表[]相当于Java中的数组[])实现栈,完整代码如下: 

"""
使用列表实现栈
"""
class Stack:
    #构造函数,初始化一个空的列表
    def __init__(self):
        self.stack = []

    #入栈
    def push(self, item):
        self.stack.append(item)

    #出栈
    def pop(self):
        if not self.is_empty():
            return self.stack.pop()
        else:
            raise IndexError("POP from empty stack")

    #栈顶元素
    def peek(self):
        if not self.is_empty():
            return  self.stack[-1]
        else:
            raise IndexError("peek from empty stack")
    #栈是否为空
    def is_empty(self):
        return len(self.stack) == 0

    #栈的大小
    def size(self):
        return len(self.stack)

if __name__ == '__main__':
    stack = Stack()
    stack.push(1)
    stack.push(2)
    stack.push(3)
    stack.push(4)
    print("栈顶元素:", stack.peek())
    print("栈大小:", stack.size())
    print("弹出元素:", stack.pop())
    print("栈是否为空:", stack.is_empty())
    print("当前栈大小:", stack.size())

将列表当做队列使用

在 Python 中,列表(list)可以用作队列(queue),但由于列表的特点,直接使用列表来实现队列并不是最优的选择。

队列是一种先进先出(FIFO, First-In-First-Out)的数据结构,意味着最早添加的元素最先被移除。

使用列表时,如果频繁地在列表的开头插入或删除元素,性能会受到影响,因为这些操作的时间复杂度是 O(n)。为了解决这个问题,Python 提供了 collections.deque,它是双端队列,可以在两端高效地添加和删除元素。

使用deque方法来实现队列

from collections import deque
# class Queue:
#     def __init__(self):
#         self.queue = deque()
    # 空队列
queue = deque()

# 向队尾中添加数据
queue.append("a")
queue.append("d")
queue.append("f")
print("队列状态:", queue)

# 队首中移除元素
first_element = queue.popleft()
print("移除的元素:", first_element)
print("队列原色:", queue)

# 查看队首总原色(不移除)
front_element = queue[0]
print("队首原色:", front_element)

# 检查队列是否为空
is_empty = len(queue) == 0
print("队列是否为空:", is_empty)

# 获取队列大小
size = len(queue)
print("队列大小是:", size)


# if __name__ == '__main__':
#     queue.append()


使用列表来实现队列

class Queues:

    #1.初始化,创建列表
    def __init__(self):
        self.queue = []

    #2.向队尾添加元素
    def addqueue(self, item):
        self.queue.append(item)

    #3.从队首移除元素
    def delqueue(self):
        if not self.is_empty():
            return self.queue[0]
        else:
            raise IndexError("队列为空,无法移除元素!")
    #4.查看队首元素(不移除)
    def selectdeque(self):
        if not self.is_empty():
            return self.queue[0]
        else:
            raise IndexError("队列为空")
    #5.检查队列是否为空
    def is_empty(self):
        return len(self.queue) == 0

    #6.获取队列大小
    def size(self):
        return len(self.queue)

    # 返回当前队列
    def traverse(self):
         return self.queue[::-1]
    
if __name__ == '__main__':
    queues = Queues()
    queues.addqueue(1)
    queues.addqueue(2)
    queues.addqueue(3)
    queues.addqueue(4)
    queue = queues.traverse()
    print("当前的队列:", queue)
    # print("当前队列的大小:", queue.s)

    is_empty = queues.is_empty()
    print("当前队列是否为空", is_empty)

    front_deque = queues.selectdeque()
    print("队列首位元素:", front_deque)

    first_queue = queues.delqueue()
    print("队列当前状态:", first_queue)


相关文章:

  • macpro m1 安装deepseek
  • QEMU 的详细介绍、安装指南、配置说明
  • vuetify项目添加代理跨域请求
  • 【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!
  • 基于 ‌MySQL 数据库‌对三级视图(用户视图、DBA视图、内部视图)的详细解释
  • 2.2 添加注释
  • Uniapp 中布局魔法:display 属性
  • Redis速成(1)VMware虚拟机安装Redis+Session验证登录注册+MybatisPlus
  • 排序03(数据结构初阶)
  • 2.16作业
  • 数据库的常见权限作用
  • 在MAC上面通过HomeBrew安装node和npm@指定版本
  • Chart.js 折线图深入解析与使用指南
  • CentOS安装MariaDB
  • 轻量化网络设计|ShuffleNet:深度学习中的轻量化革命
  • Harbor服务需要crt证书,而下载是nginx的证书pem,应该怎么处理
  • 分享---rpc运维事故处理
  • vue3中测试:单元测试、组件测试、端到端测试
  • oracle日志大量解析报错too many parse errors
  • (python)Arrow库使时间处理变得更简单
  • 手机微网站建设案例及报告/郑州网络推广专业公司
  • 做淫秽网站有事情吗/深圳市前十的互联网推广公司
  • 西安市高新区建设规划局网站/免费二级域名分发
  • 石家庄微信网站制作/自媒体135网站免费下载安装
  • 如何利用php开源系统建立php网站/网络营销策划方案书范文
  • 三 网站建设/重庆网站建设软件