golang数组实现栈(压栈,弹栈,取栈顶元素,获取栈中元素个数)

栈的介绍:

  1. 栈是一个先入后出的有序列表
  2. 栈(stack)是线制性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈底(Bottom)
  3. 栈和堆栈是同一个概念
  4. 最先放入栈中的元素在栈底,最后放入的元素在栈顶
  5. 删除元素:最后放入栈中的元素先删除,最先放入的最后删除
  6. 栈的使用场景:子程序的调用(在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中),递归,表达式的转换与求值等

示意图:

在这里插入图片描述
在这里插入图片描述
栈的实现有两种方法,分别为采用数组来实现和采用链表来实现,这里我们采用数组来实现。

解题思路:

在这里插入图片描述

  1. 可以把数组的首元素当作栈底,同时记录栈中元素的个数size
  2. 如图,压栈的操作是把待压栈的元素放到数组arr[size]中,然后执行size++操作。
  3. 同2原理,弹栈操作是取数组arr[size-1]元素,然后执行size–操作。
  4. 根据以上分析可以很容易实现栈

代码如下:

package main

import (
	"errors"
	"fmt"
)

//使用结构体管理栈
type sliceStack struct {
   
	arr       []interface{
   } //切片
	stackSize int           //栈中元素的个数
}

//创建栈
func newSliceStack() *sliceStack {
   
	return &sliceStack{
   arr: make([]interface{
   }, 0)}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值