Go語言程式檢查棧是否為空


在這篇 Go 語言文章中,我們將使用迭代和遞迴方法來檢查棧是否為空。棧是一種線性資料結構,遵循後進先出 (LIFO) 原則。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 和 strconv 包。

  • 步驟 2 − 建立一個棧結構,使用一個 item 切片來儲存棧元素。

  • 步驟 3 − 現在,定義函式 push()、pop() 和 peek() 來執行棧的基本操作。

  • 步驟 4 − push() 將元素新增到棧的末尾,而 pop() 從棧中刪除最後一個元素。peek() 返回棧中的最後一個元素,但不刪除它。

  • 步驟 5 − 現在,建立一個 isEmpty() 函式,如果棧為空則返回 true,否則返回 false。

  • 步驟 6 − 它檢查 Stack 結構中元素的長度是否等於 0。如果長度為 0,則棧為空,函式返回 true。否則,如果長度大於 0,則棧不為空,函式返回 false。

  • 步驟 7 − 啟動 main() 函式。在 main() 函式內部,建立一個棧結構並使用一些元素初始化一個棧。

  • 步驟 8 − 現在,呼叫 isEmpty() 函式並將棧作為引數傳遞給它。

  • 步驟 9 − 最初,棧為空,因此它返回 false。然後,在推送一些元素後再次呼叫 isEmpty() 函式,現在它將返回 true。

  • 步驟 10 − 此外,在彈出所有元素後,它返回 true。

示例 1

在這個示例中,我們將定義一個 isEmpty() 函式,該函式用於使用迭代方法檢查棧是否為空。

package main

import (
   "fmt"
)

type Stack struct {
   items []int
}

func (s *Stack) push(item int) {
   s.items = append(s.items, item)
}

func (s *Stack) pop() int {
   l := len(s.items) - 1
   item := s.items[l]
   s.items = s.items[:l]
   return item
}

func (s *Stack) peek() int {
   return s.items[len(s.items)-1]
}

func (s *Stack) isEmpty() bool {
   return len(s.items) == 0
}

func main() {
   s := &Stack{}

   fmt.Println("Is the stack empty?", s.isEmpty())

   s.push(4)
   s.push(5)
   s.push(3)

   fmt.Println("Is the stack empty?", s.isEmpty())

   s.pop()
   s.pop()
   s.pop()

   fmt.Println("Is the stack empty?", s.isEmpty())
}

輸出

Is the stack empty? true
Is the stack empty? false
Is the stack empty? true 

示例 2

在這個示例中,我們將定義一個 isEmpty() 函式,該函式用於使用遞迴方法檢查棧是否為空。

package main

import "fmt"

type Stack struct {
   items []int
}
func (s *Stack) Push(item int) {
   s.items = append(s.items, item)
}

func (s *Stack) Pop() int {
   if len(s.items) == 0 {
      return -1
   }
   item := s.items[len(s.items)-1]
   s.items = s.items[:len(s.items)-1]
   return item
}

func (s *Stack) isEmpty() bool {
   if len(s.items) == 0 {
      return true
   } else {
      lastItem := s.Pop()
      isEmpty := s.isEmpty()
      s.Push(lastItem)
      return isEmpty
   }
}

func main() {
   s := Stack{}
   s.Pop()
   s.Pop()
   s.Pop()

   fmt.Println("Is the stack empty?", s.isEmpty())
}

輸出

Is the stack empty? true

結論

我們已成功編譯並執行了一個 Go 語言程式,使用迭代和遞迴方法以及兩個示例來檢查棧是否為空。在第一個示例中,我們使用了迭代方法,在第二個示例中,我們使用了遞迴方法。

更新於: 2023年4月3日

194 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告