Python数据结构之栈、队列的实现代码分享
### Python数据结构之栈、队列的实现及应用详解 #### 一、栈(Stack) **栈**是一种特殊的线性表,只允许在一端进行插入和删除操作,这端通常被称为**栈顶**(top),而与之相对的是**栈底**(bottom)。这种数据结构遵循**后进先出**(LIFO, Last In First Out)的原则。 ### 1.1 栈的实现 下面是一段简单的Python代码实现了一个基本的栈: ```python class Stack: def __init__(self): self.stack = [] def is_empty(self): return len(self.stack) == 0 def push(self, item): self.stack.append(item) def pop(self): if self.is_empty(): raise IndexError("Pop from empty stack") return self.stack.pop() def peek(self): if self.is_empty(): raise IndexError("Peek from empty stack") return self.stack[-1] def size(self): return len(self.stack) ``` - **`__init__`**: 初始化栈为空列表。 - **`is_empty`**: 判断栈是否为空。 - **`push`**: 入栈操作,将新元素添加到列表末尾。 - **`pop`**: 出栈操作,移除并返回列表最后一个元素。 - **`peek`**: 返回栈顶元素但不移除。 - **`size`**: 返回栈中元素的数量。 ### 1.2 栈的应用 #### 1.2.1 检查程序中的成对符号 在编程语言中,经常需要检查括号等成对符号是否正确配对。可以通过栈来实现这个功能。 ```python def match(open, close): opens = '([{' closes = ')]}' return opens.index(open) == closes.index(close) def syntax_checker(expression): stack = Stack() balanced = True for symbol in expression: if symbol in '([{': stack.push(symbol) elif symbol in ')]}': if stack.is_empty(): balanced = False break else: top = stack.pop() if not match(top, symbol): balanced = False break if not stack.is_empty(): balanced = False return balanced ``` - **`match`**: 检查括号是否匹配。 - **`syntax_checker`**: 检查表达式中括号是否平衡。 #### 1.2.2 进制转换 栈也可以用来进行不同进制之间的转换,例如从十进制转换为二进制。 ```python def decimal_to_binary(decimal): stack = Stack() while decimal > 0: remainder = decimal % 2 decimal = decimal // 2 stack.push(remainder) binary_str = '' while not stack.is_empty(): binary_str += str(stack.pop()) return binary_str ``` 此函数通过不断取模和整除来得到二进制表示,并利用栈的特性逆序输出最终的二进制字符串。 #### 1.2.3 后缀表达式的计算 在计算机科学中,后缀表达式是一种没有括号且运算符位于其操作数后的表达式形式。例如,(7+8)/(3+2) 的后缀形式为 `7 8 + 3 2 + /`。 后缀表达式的计算过程可以利用栈来实现: ```python def evaluate_postfix(postfix_expression): stack = Stack() for token in postfix_expression: if token.isdigit(): stack.push(int(token)) else: operand2 = stack.pop() operand1 = stack.pop() result = perform_operation(token, operand1, operand2) stack.push(result) return stack.pop() def perform_operation(operator, operand1, operand2): if operator == '+': return operand1 + operand2 elif operator == '-': return operand1 - operand2 elif operator == '*': return operand1 * operand2 elif operator == '/': return operand1 / operand2 ``` - **`evaluate_postfix`**: 计算后缀表达式的值。 - **`perform_operation`**: 执行具体的运算。 ### 二、队列(Queue) **队列**是一种特殊的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。这种数据结构遵循**先进先出**(FIFO, First In First Out)的原则。 #### 2.1 队列的实现 下面是一段简单的Python代码实现了一个基本的队列: ```python class Queue: def __init__(self): self.queue = [] def is_empty(self): return len(self.queue) == 0 def enqueue(self, item): self.queue.insert(0, item) def dequeue(self): if self.is_empty(): raise IndexError("Dequeue from empty queue") return self.queue.pop() def front(self): if self.is_empty(): raise IndexError("Front of empty queue") return self.queue[-1] def size(self): return len(self.queue) ``` - **`enqueue`**: 入队操作,在列表开头插入新元素。 - **`dequeue`**: 出队操作,移除并返回列表最后一个元素。 #### 2.2 队列的应用 队列在实际编程中有很多应用场景,如任务调度、消息传递系统等。例如,可以利用队列实现一个简单的任务队列管理器。 ```python def task_queue_manager(tasks): task_queue = Queue() for task in tasks: task_queue.enqueue(task) while not task_queue.is_empty(): print(f"Processing task: {task_queue.front()}") task_queue.dequeue() ``` 这段代码展示了如何使用队列管理一系列任务的执行顺序。 通过以上介绍可以看出,栈和队列作为两种基础的数据结构,在实际编程中有广泛的应用。理解它们的特点和工作原理对于解决实际问题至关重要。

























- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据时代下互联网金融发展的机遇与风险应对.docx
- 三天六万平米之创造算量新神话.doc
- 信息化条件下农村综合服务体系建设问题与对策.docx
- 通信设备环境考点精讲之空调系统的水泵与冷却塔.docx
- 电子信息工程在信息化环境中的发展探讨.docx
- 建设工程施工技术资料管理培训课件(161页)2.pdf
- 实验一---网络化控制系统的构成及投运和1.doc
- 牛津英语3A优秀教案.doc
- 物流行业信息化发展现状及趋势分析.docx
- 基于android-的任务管理器的设计.doc
- 某小区工地临时用水方案.doc
- 互联网时代的信息技术.doc
- 11-楼竣工评估报告.doc
- 万科大钢模板施工方案.doc
- 消防水施工程进度计划安排表.doc
- 第11讲第6章-圆轴扭转-.ppt


