Golang 找到栈中的最小值的程序
在Golang中,我们可以使用迭代方法和优化的迭代方法找到栈中的最小值。栈是一种遵循后进先出(LIFO)原则的线性数据结构。
语法
func (s *Stack) getMin() int {…}
getMin()函数用于在堆栈中找到最小值。它以指向堆栈的地址指针作为参数。
步骤
- 步骤1 - 首先,我们需要导入fmtpackage。
-
步骤2 - 创建一个堆栈结构,其中包含一个项切片来存储堆栈元素,以及一个最小切片来存储堆栈中的最小值。
-
步骤3 - 现在,定义push()和pop()函数来执行与堆栈的基本操作。
-
步骤4 - push()将项目添加到堆栈的末尾,并检查项目是否小于或等于最小切片中的当前最小值。如果是这样,那么项目也将添加到最小切片中。
-
步骤5 - pop()从堆栈中移除最后一个项目,并检查项目是否等于最小切片中的最后一个项目。如果是这样,那么表示最小切片中的最后一个项目是堆栈中的最小值,我们还需要将其从最小切片中删除。
-
步骤6 - 现在,创建getMin()函数来找到堆栈中的最小值。它简单地返回最小切片中的最后一个项目,这表示堆栈中的最小值。
-
步骤7 - 启动main()函数。在main()函数内部,创建一个堆栈结构并初始化堆栈中的一些项目。
-
步骤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语言程序。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了优化的迭代方法。