Golang程序查找堆栈中的最小值

Golang程序查找堆栈中的最小值

在Golang中,我们可以使用迭代方法和优化的迭代方法来查找堆栈中的最小值。堆栈是一种遵循后进先出(LIFO)原则的线性数据结构。

语法

func (s *Stack) getMin() int {…}

getMin()函数用于查找堆栈中的最小值。它的参数是堆栈的地址指针。

算法

  • 步骤1 −首先,我们需要导入fmt package。

  • 步骤2 −创建一个带有项目片段的堆栈结构来存储堆栈元素和一个min片段来存储堆栈中的最小值。

  • 步骤3 −现在,定义push()和pop()函数来执行堆栈的基本操作。

  • 步骤4 −push()将项目添加到堆栈的末尾,并检查项目是否小于或等于min片段中的当前最小值。如果是这样,那么项目也将添加到min片段中。

  • 步骤5 −pop()从堆栈中删除最后一个项目,并检查该项是否等于min片段中的最后一个项目。如果是这样,则表示min片段中的最后一个项是堆栈中的最小值,并且我们还需要从min片段中将其删除。

  • 步骤6 −现在,创建getMin()函数以查找堆栈中的最小值。它简单地返回min片段中的最后一个项目,表示堆栈中的最小值。

  • 步骤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}

func main() {
   s := Stack{}
   s.push(5)
   s.push(2)
   s.push(7)
   s.push(1)
   s.push(8)
   fmt.Println("堆栈中的最小值为:", s.getMin()) 
   s.pop()
   s.pop()
   fmt.Println("堆栈中的最小值为:", s.getMin()) 
} 

输出

堆栈中的最小值为:1
堆栈中的最小值为:2 

示例2

在此示例中,我们将定义一个getMin()函数,该函数以优化的方式使用迭代方法查找堆栈中的最小值。

包 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("栈为空")
   }
   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("栈为空")
   }
   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("栈中最小值为:", minItem)
   }
}

输出

栈中最小值为: 1

结论

我们成功地编译并执行了一个go语言程序,通过迭代方法和优化的迭代方法来找到栈中的最小值。在第一个例子中,我们使用了迭代方法,在第二个例子中,我们使用了优化的迭代方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程