使用Golang检查堆栈是否为空的程序
在这篇Golang文章中,我们将使用迭代和递归方法来检查堆栈是否为空。堆栈是一种遵循后进先出(LIFO)原则的线性数据结构。
算法
-
步骤1 − 首先,我们需要导入fmt和strconv包。
-
步骤2 − 创建一个包含项目切片的堆栈结构以存储堆栈元素。
-
步骤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("the stack empty?", s.isEmpty())
s.push(4)
s.push(5)
s.push(3)
fmt.Println("the stack empty?", s.isEmpty())
s.pop()
s.pop()
s.pop()
fmt.Println("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("the stack empty?", s.isEmpty())
}
输出
Is the stack empty? true
结论
我们成功地编译和执行了一段使用迭代和递归方法检查栈是否为空的Go语言程序,并提供了两个示例。在第一个示例中,我们使用了迭代方法,在第二个示例中,我们使用了递归方法。