使用 Python 列表实现栈数据结构(stack)。编写从堆栈中的函数push、pop 和 peek 元素。
时间: 2024-09-18 21:18:07 浏览: 33
在Python中,可以使用列表来实现一个简单的基本栈(stack)数据结构。栈是一种遵循"先进后出"(Last In First Out, LIFO)原则的数据结构,常用的函数有push(入栈)、pop(出栈)和peek(查看顶部元素,但不移除)。
首先,我们需要定义三个函数来操作这个列表栈:
1. `push` 函数用于将元素添加到栈顶:
```python
def push(stack, item):
stack.append(item)
```
2. `pop` 函数用于删除并返回栈顶元素:
```python
def pop(stack):
if not stack: # 检查是否为空
return None
return stack.pop() # 删除并返回顶部元素
```
3. `peek` 或 `top` 函数用于查看但不移除栈顶元素:
```python
def peek(stack):
if not stack: # 检查是否为空
return None
return stack[-1] # 返回顶部元素,但不删除
```
你可以像这样使用它们:
```python
stack = []
push(stack, 1)
push(stack, 2)
push(stack, 3)
print(peek(stack)) # 输出:3
print(pop(stack)) # 输出:3
print(pop(stack)) # 输出:2
```
相关问题
使用 Python 列表实现栈数据结构(stack)。编写从堆栈中的函数push、pop 和 peek 元素
在Python中,列表非常适合用来实现栈(Stack)数据结构,因为它提供了方便的索引访问和动态大小调整功能。栈遵循“先进后出”(Last In First Out, LIFO)的原则,这意味着最后一个被压入的元素是第一个被弹出的元素。
以下是如何使用列表实现栈的三个基本操作:`push`(压入元素)、`pop`(弹出元素)和`peek`(查看顶部元素但不移除):
```python
class Stack:
def __init__(self):
self.stack = []
# push (压入) 元素到栈顶
def push(self, item):
self.stack.append(item)
# pop (弹出) 栈顶元素
def pop(self):
if not self.is_empty():
return self.stack.pop()
else:
raise IndexError("Pop from empty stack")
# peek (查看) 栈顶元素但不移除
def peek(self):
if not self.is_empty():
return self.stack[-1]
else:
raise IndexError("Peek on empty stack")
# 检查栈是否为空
def is_empty(self):
return len(self.stack) == 0
# 示例用法
s = Stack()
s.push(1)
s.push(2)
s.push(3)
print(s.peek()) # 输出: 3
print(s.pop()) # 输出: 3
print(s.pop()) # 输出: 2
print(s.is_empty()) # 输出: False
```
在这个实现中,`push`方法使用`append`操作将元素添加到列表末尾;`pop`方法如果栈不空则返回并移除列表末尾的元素,否则抛出异常;`peek`方法也检查栈是否为空,如果非空则返回末尾元素,不改变栈的状态;`is_empty`方法用于检查栈是否为空,是通过比较列表长度来判断的。
使用python列表实现栈数据结构(stack)。编写从堆栈中的函数push、pop和peek元素。
在Python中,可以使用列表来简单地实现栈数据结构。栈是一种特殊的数据结构,遵循“后进先出”(Last In First Out, LIFO)的原则。以下是使用列表实现基本操作`push`(入栈)、`pop`(出栈)和`peek`(查看顶部元素但不移除)的示例:
```python
class Stack:
def __init__(self):
self.items = []
# push operation (入栈)
def push(self, item):
self.items.append(item)
# pop operation (出栈)
def pop(self):
if not self.is_empty():
return self.items.pop() # 返回并移除最后一个元素
else:
raise Exception("Stack is empty")
# peek operation (查看顶部元素但不移除)
def peek(self):
if not self.is_empty():
return self.items[-1] # 返回顶部元素,但不改变栈的内容
else:
raise Exception("Stack is empty")
# check if the stack is empty
def is_empty(self):
return len(self.items) == 0
# 示例
stack = Stack()
stack.push(1)
stack.push(2)
print(stack.peek()) # 输出 2
print(stack.pop()) # 输出 2,然后栈顶元素变为 1
```
在这个例子中,`push()`方法将元素添加到列表的末端,`pop()`方法弹出并返回列表末尾的元素,`peek()`则查看但不移除末尾元素。如果尝试从空栈中弹出或查看元素,会抛出异常。