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 语言程序,该程序使用迭代方法和优化的迭代方法来查找栈中的最小值。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了优化的迭代方法。