Python使用列表实现栈、队列学习记录
将列表当做栈使用
在 Python 中,可以使用列表(list)来实现栈的功能。栈是一种后进先出(LIFO, Last-In-First-Out)数据结构,意味着最后添加的元素最先被移除。列表提供了一些方法,使其非常适合用于栈操作,特别是 append() 和 pop() 方法。
用 append() 方法可以把一个元素添加到栈顶,用不指定索引的 pop() 方法可以把一个元素从栈顶释放出来。
栈操作
- 压入(Push): 将一个元素添加到栈的顶端。
- 弹出(Pop): 移除并返回栈顶元素。
- 查看栈顶元素(Peek/Top): 返回栈顶元素而不移除它。
- 检查是否为空(IsEmpty): 检查栈是否为空。
- 获取栈的大小(Size): 获取栈中元素的数量。
以下是如何在 Python 中使用列表实现这些操作的详细说明:
1、创建一个空栈
stack = []
2、压入(Push)操作
使用 append() 方法将元素添加到栈的顶端:
stack.append(1)
stack.append(2)
stack.append(3)
print(stack) # 输出: [1, 2, 3]
3、弹出(Pop)操作
使用 pop() 方法移除并返回栈顶元素:
top_element = stack.pop()
print(top_element) # 输出: 3
print(stack) # 输出: [1, 2]
4、查看栈顶元素(Peek/Top)
直接访问列表的最后一个元素(不移除):
top_element = stack[-1]
print(top_element) # 输出: 2
5、检查是否为空(IsEmpty)
检查列表是否为空:
is_empty = len(stack) == 0
print(is_empty) # 输出: False
6、获取栈的大小(Size)
使用 len() 函数获取栈中元素的数量:
size = len(stack)
print(size) # 输出: 2
使用列表(Python中的列表[]相当于Java中的数组[])实现栈,完整代码如下:
"""
使用列表实现栈
"""
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)
if __name__ == '__main__':
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)
print("栈顶元素:", stack.peek())
print("栈大小:", stack.size())
print("弹出元素:", stack.pop())
print("栈是否为空:", stack.is_empty())
print("当前栈大小:", stack.size())
将列表当做队列使用
在 Python 中,列表(list)可以用作队列(queue),但由于列表的特点,直接使用列表来实现队列并不是最优的选择。
队列是一种先进先出(FIFO, First-In-First-Out)的数据结构,意味着最早添加的元素最先被移除。
使用列表时,如果频繁地在列表的开头插入或删除元素,性能会受到影响,因为这些操作的时间复杂度是 O(n)。为了解决这个问题,Python 提供了 collections.deque,它是双端队列,可以在两端高效地添加和删除元素。
使用deque方法来实现队列
from collections import deque
# class Queue:
# def __init__(self):
# self.queue = deque()
# 空队列
queue = deque()
# 向队尾中添加数据
queue.append("a")
queue.append("d")
queue.append("f")
print("队列状态:", queue)
# 队首中移除元素
first_element = queue.popleft()
print("移除的元素:", first_element)
print("队列原色:", queue)
# 查看队首总原色(不移除)
front_element = queue[0]
print("队首原色:", front_element)
# 检查队列是否为空
is_empty = len(queue) == 0
print("队列是否为空:", is_empty)
# 获取队列大小
size = len(queue)
print("队列大小是:", size)
# if __name__ == '__main__':
# queue.append()
使用列表来实现队列
class Queues:
#1.初始化,创建列表
def __init__(self):
self.queue = []
#2.向队尾添加元素
def addqueue(self, item):
self.queue.append(item)
#3.从队首移除元素
def delqueue(self):
if not self.is_empty():
return self.queue[0]
else:
raise IndexError("队列为空,无法移除元素!")
#4.查看队首元素(不移除)
def selectdeque(self):
if not self.is_empty():
return self.queue[0]
else:
raise IndexError("队列为空")
#5.检查队列是否为空
def is_empty(self):
return len(self.queue) == 0
#6.获取队列大小
def size(self):
return len(self.queue)
# 返回当前队列
def traverse(self):
return self.queue[::-1]
if __name__ == '__main__':
queues = Queues()
queues.addqueue(1)
queues.addqueue(2)
queues.addqueue(3)
queues.addqueue(4)
queue = queues.traverse()
print("当前的队列:", queue)
# print("当前队列的大小:", queue.s)
is_empty = queues.is_empty()
print("当前队列是否为空", is_empty)
front_deque = queues.selectdeque()
print("队列首位元素:", front_deque)
first_queue = queues.delqueue()
print("队列当前状态:", first_queue)