day38-栈和队列理论学习【pyhton】
在 Python 中,栈和队列是常见的数据结构,通常用来处理不同类型的数据存储和操作。Python 内置的 list
和 collections.deque
可以实现这两种数据结构。以下是详细的讲解和代码实现:
栈(Stack)
栈是一种后进先出(LIFO, Last In First Out)的数据结构。我们可以使用 Python 的 list
来实现栈,栈的主要操作包括:
- 入栈(Push): 将元素添加到栈顶。
- 出栈(Pop): 从栈顶移除并返回元素。
- 查看栈顶元素(Peek/Top): 返回栈顶元素但不移除。
- 检查栈是否为空(Is Empty): 判断栈是否包含任何元素。
使用 list
实现栈
代码示例:
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
raise IndexError("Pop from empty stack")
def peek(self):
if not self.is_empty():
return self.items[-1]
raise IndexError("Peek from empty stack")
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
# 使用示例
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print("栈顶元素:", stack.peek()) # 输出 3
print("栈大小:", stack.size()) # 输出 3
print("出栈元素:", stack.pop()) # 输出 3
print("栈是否为空:", stack.is_empty()) # 输出 False
队列(Queue)
队列是一种先进先出(FIFO, First In First Out)的数据结构。在 Python 中,我们可以使用 collections.deque
来实现队列,队列的主要操作包括:
- 入队(Enqueue): 将元素添加到队列尾部。
- 出队(Dequeue): 从队列头部移除并返回元素。
- 查看队列头部元素(Peek/Front): 返回队列头部元素但不移除。
- 检查队列是否为空(Is Empty): 判断队列是否包含任何元素。
使用 collections.deque
实现队列
代码示例:
from collections import deque
class Queue:
def __init__(self):
self.items = deque()
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.popleft()
raise IndexError("Dequeue from empty queue")
def peek(self):
if not self.is_empty():
return self.items[0]
raise IndexError("Peek from empty queue")
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
# 使用示例
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
print("队列头部元素:", queue.peek()) # 输出 1
print("队列大小:", queue.size()) # 输出 3
print("出队元素:", queue.dequeue()) # 输出 1
print("队列是否为空:", queue.is_empty()) # 输出 False
总结
- 栈(Stack): 使用 Python 的
list
实现。主要操作有push
,pop
,peek
, 和is_empty
。 - 队列(Queue): 使用
collections.deque
实现。主要操作有enqueue
,dequeue
,peek
, 和is_empty
。
这两种数据结构可以通过这些操作灵活地处理和存储数据。在实际应用中,选择使用哪种数据结构取决于具体的需求和场景。
ok了,就到这里叭~~~
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!