栈和队列的主要区别

一、栈和队列的基本介绍

栈(Stack)和队列(Queue)是两种经典的数据结构,用于在计算机程序中存储和管理数据。栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。队列是一种先进先出(FIFO)的数据结构,只允许在队列尾部进行插入操作,在队列头部进行删除操作。

下面是栈和队列的简单Python代码实现:

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

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def is_empty(self):
        return len(self.items) == 0

class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        return self.items.pop(0)

    def is_empty(self):
        return len(self.items) == 0

二、基本操作的差异

栈和队列的主要区别在于它们的基本操作。在栈中,元素的插入和删除只能在栈顶进行,而队列中元素的插入只能在队列尾部进行,删除操作则只能在队列头部进行。这意味着在栈中最后插入的元素会被最先删除,而在队列中最先插入的元素会被最先删除。

下面是分别实现了栈和队列的基本操作代码:

# 栈
class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def is_empty(self):
        return len(self.items) == 0


# 队列
class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        return self.items.pop(0)

    def is_empty(self):
        return len(self.items) == 0

三、性能差异

栈和队列的另一个主要区别是它们的性能差异。在栈中,插入和删除操作的时间复杂度都是O(1),因为只需要操作栈顶的元素。而在队列中,插入操作的时间复杂度也是O(1),但删除操作的时间复杂度为O(n),因为需要将所有的元素向前移动一位。

下面是分别实现了栈和队列的性能比较代码:

import time

# 栈
s = Stack()
start = time.time()
for i in range(1000000):
    s.push(i)
while not s.is_empty():
    s.pop()
end = time.time()
print("Time used for Stack:", end-start)

# 队列
q = Queue()
start = time.time()
for i in range(1000000):
    q.enqueue(i)
while not q.is_empty():
    q.dequeue()
end = time.time()
print("Time used for Queue:", end-start)

四、应用场景的不同

栈和队列在不同的应用场景中有不同的用途。栈通常用于处理递归和回溯问题,以及表达式的计算和括号匹配。队列则常用于解决如广度优先搜索(BFS)等问题。同时,队列还常被用于实现具有缓冲区的数据传输。

下面是栈和队列分别应用于表达式括号匹配的代码实现:

# 栈应用:表达式括号匹配
def is_balanced(expr):
    s = Stack()
    for char in expr:
        if char in ['(', '[', '{']:
            s.push(char)
        elif char in [')', ']', '}']:
            if s.is_empty():
                return False
            top = s.pop()
            if not is_match(top, char):
                return False
    return s.is_empty()

def is_match(p1, p2):
    return (p1 == '(' and p2 == ')') or (p1 == '[' and p2 == ']') or (p1 == '{' and p2 == '}')

print(is_balanced("(Pangolin)[Python]"))  # True
print(is_balanced("{Python(Jupyter)}[Java]"))  # True
print(is_balanced("({Python][Jupyter)}"))  # False

# 队列应用:BFS实现图的遍历
from collections import deque

def bfs(graph, start):
    visited = set()
    queue = deque([start])
    visited.add(start)

    while queue:
        vertex = queue.popleft()
        print(vertex, end=" ")
        for neighbor in graph[vertex]:
            if neighbor not in visited:
                queue.append(neighbor)
                visited.add(neighbor)

graph = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': []
}

bfs(graph, 'A')
# 输出:A B C D E F

原创文章,作者:ACOX,如若转载,请注明出处:https://www.506064.com/n/133585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ACOXACOX
上一篇 2024-10-03 23:59
下一篇 2024-10-04 00:00

相关推荐

  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • Sublime Test与Python的区别

    Sublime Text是一款流行的文本编辑器,而Python是一种广泛使用的编程语言。虽然Sublime Text可以用于编写Python代码,但它们之间有很多不同之处。接下来从…

    编程 2025-04-29
  • Python中的队列定义

    本篇文章旨在深入阐述Python中队列的定义及其应用,包括队列的定义、队列的类型、队列的操作以及队列的应用。同时,我们也会为您提供Python代码示例。 一、队列的定义 队列是一种…

    编程 2025-04-29
  • Shell脚本与Python脚本的区别

    本文将从多个方面对Shell脚本与Python脚本的区别做详细的阐述。 一、语法差异 Shell脚本和Python脚本的语法存在明显差异。 Shell脚本是一种基于字符命令行的语言…

    编程 2025-04-29
  • RabbitMQ和Yii2的消息队列应用

    本文将探讨RabbitMQ和Yii2之间的消息队列应用。从概念、安装和配置、使用实例等多个方面详细讲解,帮助读者了解和掌握RabbitMQ和Yii2的消息队列应用。 一、Rabbi…

    编程 2025-04-29
  • Python中while语句和for语句的区别

    while语句和for语句是Python中两种常见的循环语句,它们都可以用于重复执行一段代码。然而,它们的语法和适用场景有所不同。本文将从多个方面详细阐述Python中while语…

    编程 2025-04-29
  • Web程序和桌面程序的区别

    Web程序和桌面程序都是进行软件开发的方式,但是它们之间存在很大的区别。本文将从多角度进行阐述。 一、运行方式 Web程序运行于互联网上,用户可以通过使用浏览器来访问它。而桌面程序…

    编程 2025-04-29
  • TensorFlow和Python的区别

    TensorFlow和Python是现如今最受欢迎的机器学习平台和编程语言。虽然两者都处于机器学习领域的主流阵营,但它们有很多区别。本文将从多个方面对TensorFlow和Pyth…

    编程 2025-04-28
  • 麦语言与Python的区别

    麦语言和Python都是非常受欢迎的编程语言。它们各自有自己的优缺点和适合的应用场景。本文将从语言特性、语法、生态系统等多个方面,对麦语言和Python进行详细比较和阐述。 一、语…

    编程 2025-04-28
  • MySQL bigint与long的区别

    本文将从数据类型定义、存储空间、数据范围、计算效率、应用场景五个方面详细阐述MySQL bigint与long的区别。 一、数据类型定义 bigint在MySQL中是一种有符号的整…

    编程 2025-04-28

发表回复

登录后才能评论