Golang 栈

Jackey Golang 135 次浏览 , 没有评论

栈的介绍

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

数组模拟栈

代码:

package main

import (
  "errors"
  "fmt"
)

type Stack struct {
  MaxTop int    // 表示栈最大可以存放元素个数
  Top    int    // 表示栈顶
  Arr    [5]int // 数组模拟栈
}

// 入栈
func (s *Stack) Push(val int) (err error) {
  // 先判断栈是否已满
  if s.Top == s.MaxTop-1 {
    fmt.Println("stack full")
    return errors.New("stack full")
  }
  s.Top++
  s.Arr[s.Top] = val
  return
}

// 出栈
func (s *Stack) Pop() (val int, err error) {
  // 判断栈是否为空
  if s.Top == -1 {
    fmt.Println("stack full")
    return 0, errors.New("stack full")
  }
  val = s.Arr[s.Top]
  s.Top--
  return val, nil
}

// 遍历栈
func (s *Stack) List() {
  if s.Top == -1 {
    fmt.Println("stack full")
    return
  }
  fmt.Println("栈的信息如下:")
  for i := s.Top; i >= 0; i-- {
    fmt.Printf("arr[%d]=%d\n", i, s.Arr[i])
  }
}

func main() {
  stack := Stack{
    MaxTop: 5,
    Top:    -1,
  }
  stack.Push(1)
  stack.Push(2)
  stack.Push(3)
  stack.Push(4)
  stack.Push(5)
  stack.List()
  val, _ := stack.Pop()
  fmt.Println("出栈信息:", val)
  stack.List()
}

运行结果:

栈的信息如下:
arr[4]=5
arr[3]=4
arr[2]=3
arr[1]=2
arr[0]=1
出栈信息: 5
栈的信息如下:
arr[3]=4
arr[2]=3
arr[1]=2
arr[0]=1

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Go