当前位置:首页>python>Python 栈和队列

Python 栈和队列

  • 2026-10-11 07:40:08
Python 栈和队列
DATA  STRUCTURE
栈和队列

数据多种多样,对用户来说有文字,图片,音频,视频等,对系统来说有数字,字符串,列表,集合,元组,字典等数据类型,那这些数据在存储时应该以怎样的方式进行保存呢?当我们需要对数据进行调用访问,查找修改时,怎样快速的找到我们所需要的数据呢?

随着数据保存的越来越多,这些问题将变得越来越困难,因此一种简单快捷的存储方式就变的很重要,还可以针对不同的应用场景,适应不同的存储方式,这些存储方式就是数据结构。常见的数据结构有栈,队列,集合,树,链表,字典等,今天学习两种简单的数据结构,栈和队列。

1.列表的常见方法

Python中由于列表是一种有序的,可以修改的容器,用于保存一串数据,方便增删改查操作,非法灵活,因此常用列表来进行操作。常见的列表方法如下:

list.append(x)把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。
list.extend(L)通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。
list.insert(i, x)在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x)删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i])从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)
list.clear()移除列表中的所有项,等于del a[:]。
list.index(x)返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。
list.count(x)返回 x 在列表中出现的次数。
list.sort()对列表中的元素进行排序。
list.reverse()倒排列表中的元素。

2.栈的实现方法

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

栈操作

  • 压入(Push): 将一个元素添加到栈的顶端。

  • 弹出(Pop): 移除并返回栈顶元素。

  • 查看栈顶元素(Peek/Top): 返回栈顶元素而不移除它。

  • 检查是否为空(IsEmpty): 检查栈是否为空。

  • 获取栈的大小(Size): 获取栈中元素的数量。

具体实例如下:

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)# 使用示例stack = Stack()stack.push(1)stack.push(2)stack.push(3)print("栈顶元素:", stack.peek())  # 输出: 栈顶元素: 3print("栈大小:", stack.size())    # 输出: 栈大小: 3print("弹出元素:", stack.pop())  # 输出: 弹出元素: 3print("栈是否为空:", stack.is_empty())  # 输出: 栈是否为空: Falseprint("栈大小:", stack.size())    # 输出: 栈大小: 2

3.队列的实现方法

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

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

具体实例如下:

from collections import deque# 创建一个空队列queue = deque()# 向队尾添加元素queue.append('a')queue.append('b')queue.append('c')print("队列状态:", queue)  # 输出: 队列状态: deque(['a', 'b', 'c'])# 从队首移除元素first_element = queue.popleft()print("移除的元素:", first_element)  # 输出: 移除的元素: aprint("队列状态:", queue)            # 输出: 队列状态: deque(['b', 'c'])# 查看队首元素(不移除)front_element = queue[0]print("队首元素:", front_element)    # 输出: 队首元素: b# 检查队列是否为空is_empty = len(queue) == 0print("队列是否为空:", is_empty)     # 输出: 队列是否为空: False# 获取队列大小size = len(queue)print("队列大小:", size)            # 输出: 队列大小: 2
END

最新文章

随机文章