Go语言程序查找栈中的最小值
在 Go 语言中,我们可以使用迭代方法和优化的迭代方法来查找栈中的最小值。栈是一种线性数据结构,遵循后进先出 (LIFO) 原则。
语法
func (s *Stack) getMin() int {…}
getMin() 函数用于查找栈中的最小值。它以指向栈的地址指针作为参数。
算法
步骤 1 − 首先,我们需要导入 fmt 包。
步骤 2 − 创建一个栈结构,其中包含一个 item 切片来存储栈元素,以及一个 min 切片来存储栈中的最小值。
步骤 3 − 现在,定义函数 push() 和 pop() 来执行栈的基本操作。
步骤 4 − push() 将 item 添加到栈的末尾,并检查 item 是否小于或等于 min 切片中当前的最小值。如果是,则 item 也将添加到 min 切片中。
步骤 5 − pop() 从栈中删除最后一个 item,并检查 item 是否等于 min 切片中的最后一个 item。如果是,则表示 min 切片中的最后一个 item 是栈中的最小值,我们需要将其从 min 切片中删除。
步骤 6 − 现在,创建 getMin() 函数来查找栈中的最小值。它只需返回 min 切片中的最后一个 item,该 item 表示栈中的最小值。
步骤 7 − 启动 main() 函数。在 main() 函数内部,创建一个栈结构并使用一些 item 初始化一个栈。
步骤 8 − 现在,调用 getMin() 函数。
步骤 9 − 此外,栈中的最小值将打印到控制台。
示例 1
在本例中,我们将定义一个 getMin() 函数,该函数用于使用迭代方法查找栈中的最小值。
package main
import "fmt"
type Stack struct {
items []int
min []int
}
func (s *Stack) push(item int) {
s.items = append(s.items, item)
if len(s.min) == 0 || item <= s.min[len(s.min)-1] {
s.min = append(s.min, item)
}
}
func (s *Stack) pop() int {
if len(s.items) == 0 {
return -1 // stack is empty
}
popped := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
if popped == s.min[len(s.min)-1] {
s.min = s.min[:len(s.min)-1]
}
return popped
}
func (s *Stack) getMin() int {
if len(s.min) == 0 {
return -1
}
return s.min[len(s.min)-1]
}
func main() {
s := Stack{}
s.push(5)
s.push(2)
s.push(7)
s.push(1)
s.push(8)
fmt.Println("Minimum value in stack is:", s.getMin())
s.pop()
s.pop()
fmt.Println("Minimum value in stack is:", s.getMin())
}
输出
Minimum value in stack is: 1 Minimum value in stack is: 2
示例 2
在本例中,我们将定义一个 getMin() 函数,该函数用于以优化的方式使用迭代方法查找栈中的最小值。
package main
import (
"errors"
"fmt"
)
type Stack struct {
items []int
}
func (s *Stack) Push(item int) {
s.items = append(s.items, item)
}
func (s *Stack) Pop() (int, error) {
if len(s.items) == 0 {
return 0, errors.New("stack is empty")
}
poppedItem := s.items[len(s.items)-1]
s.items = s.items[:len(s.items)-1]
return poppedItem, nil
}
func (s *Stack) Min() (int, error) {
if len(s.items) == 0 {
return 0, errors.New("stack is empty")
}
minItem := s.items[0]
for _, item := range s.items {
if item < minItem {
minItem = item
}
}
return minItem, nil
}
func main() {
stack := Stack{}
stack.Push(4)
stack.Push(6)
stack.Push(2)
stack.Push(8)
stack.Push(1)
minItem, err := stack.Min()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Minimum value in stack is:", minItem)
}
}
输出
Minimum value in stack is: 1
结论
我们已成功编译并执行了一个 Go 语言程序,该程序使用迭代方法和优化的迭代方法来查找栈中的最小值。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了优化的迭代方法。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP