GO 栈

栈的介绍

有些程序员也把栈称为堆栈,即栈和堆栈是同一个概念
栈的英文为(stack)
栈是一个先入后出(FILO-First In Last Out)的有序列表。
栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
根据堆栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除

package main

import (
   "errors"
   "fmt"
)

type Stack struct {
   MaxTop int    //表示我们栈最大可以存放数个数
   Top    int    //表示栈顶,因为栈顶固定,因此我们直接使用Top
   arr    [5]int // 数组模拟栈
}

func (this *Stack) Push(val int) (err error) {
   //先判断栈是否满了
   if this.Top == this.MaxTop-1 {
      fmt.Println("stack full")
      return errors.New("stack full")
   }

   this.Top++
   this.arr[this.Top] = val
   return
}

func (this *Stack) Pop() (val int, err error) {
   //判断栈是否为空
   if this.Top == -1 {
      fmt.Println("stack empty")
      return 0, errors.New("stack empty")
   }

   //先去值
   val = this.arr[this.Top]
   this.Top--
   return val, nil
}

func (this *Stack) List() {
   //先判断是否为空
   if this.Top == -1 {
      fmt.Println("stack empty")
      return
   }
   for i := this.Top; i >= 0; i-- {
      fmt.Printf("arr[%d] = %d \n", i, this.arr[i])
   }
}

func main() {
   stack := &Stack{
      MaxTop: 5,
      Top:    -1, //-1 表示栈为空
   }
   stack.Push(1)
   stack.Push(2)
   stack.Push(3)
   stack.Push(4)
   stack.Push(5)
   //stack.Push(6)
   stack.List()

   val, _ := stack.Pop()
   fmt.Println("出栈一个 ", val)
   val, _ = stack.Pop()
   fmt.Println("出栈一个 ", val)

   stack.List()
}

 

posted @ 2022-09-18 20:15  南昌拌粉的成长  阅读(17)  评论(0编辑  收藏  举报