当前位置:实例文章 » 其他实例» [文章]栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

发布人:shili8 发布时间:2025-02-03 23:21 阅读次数:0

**栈相关练习题**

###1. 逆波兰表达式逆波兰表达式是一种特殊的算术表达式,它遵循以下规则:

* 每个操作符都紧跟着它所作用的两个运算数。
* 操作数和操作符之间没有空格。

例如,表达式 `3+4*2` 在逆波兰表示法中变为 `342 * +`。

#### 题目:

给定一个逆波兰表达式,请你实现一个函数来计算它的值。

#### 示例:

输入:`"342 * +"`
输出:`11`

####代码示例:

def evalRPN(expression):
 stack = []
 for token in expression.split():
 if token in "+-*/":
 b = stack.pop()
 a = stack.pop()
 if token == "+":
 stack.append(a + b)
 elif token == "-":
 stack.append(a - b)
 elif token == "*":
 stack.append(a * b)
 else:
 stack.append(a / b)
 else:
 stack.append(int(token))
 return stack[0]

###2.有效括号给定一个字符串,请你判断它是否是有效的括号序列。

#### 题目:

* 左括号必须在右括号之前。
* 每个左括号都必须与一个右括号配对。
* 左括号和右括号的数量必须相等。

#### 示例:

输入:`"(()())"`
输出:`True`

输入:`")("`
输出:`False`

####代码示例:
def isValid(s):
 stack = []
 for c in s:
 if c == "(":
 stack.append(c)
 elif c == ")":
 if not stack or stack.pop() != "(":
 return False return not stack

###3. 出入栈次序匹配给定两个栈,请你判断它们的元素是否按照正确的顺序出栈。

#### 题目:

* 栈1和栈2中的元素必须按照正确的顺序出栈。
* 如果栈1中有多个相同元素,栈2中也必须有相同数量的相同元素。

#### 示例:

输入:`[1,2,3] [4,5,6]`
输出:`True`

输入:`[1,2,3] [4,5]`
输出:`False`

####代码示例:
def validateStackSequences(pushed, popped):
 stack = []
 pop_index =0 for num in pushed:
 stack.append(num)
 while stack and stack[-1] == popped[pop_index]:
 stack.pop()
 pop_index +=1 return not stack

###4. 最小栈给定一个栈,请你实现一个函数来返回最小元素。

#### 题目:

* 每次出栈时,必须返回当前栈中最小的元素。
* 如果栈为空,则返回None。

#### 示例:

输入:`[1,2,3]`
输出:`1`

输入:`[]`
输出:`None`

####代码示例:
class MinStack:
 def __init__(self):
 self.stack = []
 self.min_stack = []

 def push(self, x: int) -> None:
 self.stack.append(x)
 if not self.min_stack or x <= self.min_stack[-1]:
 self.min_stack.append(x)

 def pop(self) -> None:
 self.stack.pop()
 self.min_stack.pop()

 def top(self) -> int:
 return self.stack[-1]

 def getMin(self) -> int:
 return self.min_stack[-1]

###5. 最大栈给定一个栈,请你实现一个函数来返回最大元素。

#### 题目:

* 每次出栈时,必须返回当前栈中最大的元素。
* 如果栈为空,则返回None。

#### 示例:

输入:`[1,2,3]`
输出:`3`

输入:`[]`
输出:`None`

####代码示例:
class MaxStack:
 def __init__(self):
 self.stack = []
 self.max_stack = []

 def push(self, x: int) -> None:
 self.stack.append(x)
 if not self.max_stack or x >= self.max_stack[-1]:
 self.max_stack.append(x)

 def pop(self) -> None:
 self.stack.pop()
 self.max_stack.pop()

 def top(self) -> int:
 return self.stack[-1]

 def getMax(self) -> int:
 return self.max_stack[-1]

###6. 最小栈和最大栈给定一个栈,请你实现两个函数来返回最小元素和最大元素。

#### 题目:

* 每次出栈时,必须返回当前栈中最小的元素和最大的元素。
* 如果栈为空,则返回None。

#### 示例:

输入:`[1,2,3]`
输出:`1` 和 `3`

输入:`[]`
输出:`None` 和 `None`

####代码示例:
class MinMaxStack:
 def __init__(self):
 self.stack = []
 self.min_stack = []
 self.max_stack = []

 def push(self, x: int) -> None:
 self.stack.append(x)
 if not self.min_stack or x <= self.min_stack[-1]:
 self.min_stack.append(x)
 if not self.max_stack or x >= self.max_stack[-1]:
 self.max_stack.append(x)

 def pop(self) -> None:
 self.stack.pop()
 self.min_stack.pop()
 self.max_stack.pop()

 def top(self) -> int:
 return self.stack[-1]

 def getMin(self) -> int:
 return self.min_stack[-1]

 def getMax(self) -> int:
 return self.max_stack[-1]

###7. 最小栈和最大栈(使用两个栈)

给定一个栈,请你实现两个函数来返回最小元素和最大元素。

#### 题目:

* 每次出栈时,必须返回当前栈中最小的元素和最大的元素。
* 如果栈为空,则返回None。

#### 示例:

输入:`[1,2,3]`
输出:`1` 和 `3`

输入:`[]`
输出:`None` 和 `None`

####代码示例:
class MinMaxStack:
 def __init__(self):
 self.stack = []
 self.min_stack = []
 self.max_stack = []

 def push(self, x: int) -> None:
 self.stack.append(x)
 if not self.min_stack or x <= self.min_stack[-1]:
 self.min_stack.append(x)
 if not self.max_stack or x >= self.max_stack[-1]:
 self.max_stack.append(x)

 def pop(self) -> None:
 self.stack.pop()
 self.min_stack.pop()
 self.max_stack.pop()

 def top(self) -> int:
 return self.stack[-1]

 def getMin(self) -> int:
 return self.min_stack[-1]

 def getMax(self) -> int:
 return self.max_stack[-1]

###8. 最小栈和最大栈(使用一个栈)

给定一个栈,请你实现两个函数来返回最小元素和最大元素。

#### 题目:

* 每次出栈时,必须返回当前栈中最小的元素和最大的元素。
* 如果栈为空,则返回None。

#### 示例:

输入:`[1,2,3]`
输出:`1` 和 `3`

输入:`[]`
输出:`None` 和 `None`

####代码示例:
class MinMaxStack:
 def __init__(self):
 self.stack = []
 self.min_max_stack = []

 def push(self, x: int) -> None:
 self.stack.append(x)
 if not self.min_max_stack or x <= self.min_max_stack[-1]:
 self.min_max_stack.append(x)

 def pop(self) -> None:
 self.stack.pop()
 self.min_max_stack.pop()

 def top(self) -> int:
 return self.stack[-1]

 def getMin(self) -> int:
 return self.min_max_stack[-1]

 def getMax(self) -> int:
 return self.min_max_stack[-1]

###9. 最小栈和最大栈(使用一个栈和一个队列)

给定一个栈,请你实现两个函数来返回最小元素和最大元素。

#### 题目:

* 每次出栈时,必须返回当前栈中最小的元素和最大的元素。
* 如果栈为空,则返回None。

#### 示例:

输入:`[1,2,

相关标签:
其他信息

其他资源

Top