page contents

Python教程-如何利用Python列表实现栈和队列?

在Python中,列表是一种非常灵活的数据结构,可以用来实现多种数据结构,比如栈和队列。今天我们先来看看如何用列表实现栈。

attachments-2024-11-2dohlVP5673161d36488b.png

Python中,列表是一种非常灵活的数据结构,可以用来实现多种数据结构,比如栈和队列。今天我们先来看看如何用列表实现栈。

1. 栈的基本概念

栈是一种后进先出(LIFO, Last In First Out)的数据结构。想象一下你把书一本一本地放在桌子上,每次只能拿最上面的一本书,这就是栈的工作方式。

2. 使用列表实现栈

Python列表提供了许多内置方法,可以很方便地用来实现栈的基本操作。我们主要会用到以下方法:

append(x): 将元素x添加到列表的末尾。

pop(): 移除列表的最后一个元素并返回它。

示例代码

# 创建一个空的栈

stack = []

# 添加元素到栈中

stack.append(1)

stack.append(2)

stack.append(3)

print("栈的当前状态:", stack)  # 输出: [1, 2, 3]

# 弹出栈顶元素

top_element = stack.pop()

print("弹出的元素:", top_element)  # 输出: 3

print("栈的当前状态:", stack)  # 输出: [1, 2]

3. 栈的常见操作

除了基本的入栈和出栈操作,我们还可以实现一些常见的栈操作,比如检查栈是否为空、获取栈的大小等。

示例代码

# 检查栈是否为空

def is_empty(stack):

    return len(stack) == 0

# 获取栈的大小

def size(stack):

    return len(stack)

# 示例

stack = []

print("栈是否为空:", is_empty(stack))  # 输出: True

stack.append(1)

print("栈的大小:", size(stack))  # 输出: 1

利用Python列表实现队列

接下来,我们来看看如何用列表实现队列。

1. 队列的基本概念

队列是一种先进先出(FIFO, First In First Out)的数据结构。想象一下你在银行排队,最先来的客户最先被服务,这就是队列的工作方式。

2. 使用列表实现队列

虽然Python列表可以用来实现队列,但直接使用列表的append和pop方法效率不高,因为pop(0)的时间复杂度是O(n)。为了提高效率,我们可以使用collections.deque,它是一个双端队列,支持两端高效的插入和删除操作。

示例代码

from collections import deque

# 创建一个空的队列

queue = deque()

# 添加元素到队列中

queue.append(1)

queue.append(2)

queue.append(3)

print("队列的当前状态:", queue)  # 输出: deque([1, 2, 3])

# 弹出队首元素

front_element = queue.popleft()

print("弹出的元素:", front_element)  # 输出: 1

print("队列的当前状态:", queue)  # 输出: deque([2, 3])

3. 队列的常见操作

除了基本的入队和出队操作,我们还可以实现一些常见的队列操作,比如检查队列是否为空、获取队列的大小等。

示例代码
# 检查队列是否为空
def is_empty(queue):
    return len(queue) == 0

# 获取队列的大小
def size(queue):
    return len(queue)

# 示例
queue = deque()
print("队列是否为空:", is_empty(queue))  # 输出: True
queue.append(1)
print("队列的大小:", size(queue))  # 输出: 1
实战案例:使用栈和队列解决括号匹配问题
假设我们需要编写一个程序来检查一个字符串中的括号是否匹配。例如,输入字符串 "((()))" 应该返回 True,而输入字符串 "(())(" 应该返回 False。
1. 使用栈实现括号匹配
我们可以使用栈来解决这个问题。每当遇到左括号时,将其压入栈中;每当遇到右括号时,检查栈顶是否有对应的左括号。如果没有,说明括号不匹配。
示例代码
def is_parentheses_matched(s):
    stack = []
    mapping = {")": "(", "}": "{", "]": "["}

    for char in s:
        if char in mapping.values():
            stack.append(char)
        elif char in mapping.keys():
            if not stack or stack.pop() != mapping[char]:
                return False
        else:
            continue

    return not stack

# 测试
input_str = "((()))"
print(f"输入: {input_str}, 是否匹配: {is_parentheses_matched(input_str)}")  # 输出: True

input_str = "(())("
print(f"输入: {input_str}, 是否匹配: {is_parentheses_matched(input_str)}")  # 输出: False
2. 使用队列实现括号匹配
虽然使用栈是解决括号匹配问题的常用方法,但也可以尝试使用队列来实现。每当遇到左括号时,将其加入队列;每当遇到右括号时,检查队首是否有对应的左括号。如果没有,说明括号不匹配。
示例代码
from collections import deque

def is_parentheses_matched_with_queue(s):
    queue = deque()
    mapping = {")": "(", "}": "{", "]": "["}

    for char in s:
        if char in mapping.values():
            queue.append(char)
        elif char in mapping.keys():
            if not queue or queue.popleft() != mapping[char]:
                return False
        else:
            continue

    return not queue

# 测试
input_str = "((()))"
print(f"输入: {input_str}, 是否匹配: {is_parentheses_matched_with_queue(input_str)}")  # 输出: True

input_str = "(())("
print(f"输入: {input_str}, 是否匹配: {is_parentheses_matched_with_queue(input_str)}")  # 输出: False
总结
本文介绍了如何使用Python列表实现栈和队列,并通过具体的代码示例展示了栈和队列的基本操作。我们还通过一个实战案例,使用栈和队列解决了括号匹配问题。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-11-11 09:46
  • 阅读 ( 96 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1678 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1678 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章