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