第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Go語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之 棧

什么是栈?

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表,这一端被称为栈顶

1、栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。

2、压栈:栈的插入操作,叫做进栈,也称压栈、入栈。

3、弹栈:栈的删除操作,也叫做出栈。

avatar

栈的特点?

后进先出(Last In First Out)

如何用go语言实现栈?

栈的相关操作

  • 栈的初始化 InitStack
  • 弹栈 Pop
  • 压栈 Push
  • 栈大小 StackLen
  • 栈的容量 StackSize
  • 判断是否为空 IsEmpty
  • 判断是否已满 IsFull
  • 获取栈顶元素的值 Peek
  • 清空栈 Clear
  • 查询某个值最近距离栈顶的距离 Search
  • 遍历栈 Traverse

实现代码如下:

package Stack

import (
	"fmt"
	"log"
	"reflect"
)

/*
栈的基本操作:
- 栈的初始化 InitStack
- 压栈 Push
- 弹栈 Pop
- 栈大小 StackLen
- 栈的容量 StackSize
- 判断是否为空 IsEmpty
- 判断是否已满 IsFull
- 获取栈顶元素的值 Peek
- 清空栈 Clear
- 查询某个值==最近==距离栈顶的距离 Search
- 遍历栈 Traverse

 */

type stack struct {
	size int64 //容量
	length  int64 //栈的长度
	data []interface{} //存在的元素
}


//初始化栈
func InitStack(size int64) stack {
	t := stack{}
	t.size = size
	t.data = make([]interface{}, size)
	return t
}

//压栈
func (s *stack) Push(r interface{}) (b bool,err error) {
	if s.IsFull() {
		b = false
		err = fmt.Errorf("Stack is Full")
		log.Println("Stack is Full")
		return
	}
	s.data[s.length] = r
	s.length++
	return
}

//弹栈
func (s *stack) Pop() (r interface{},err error) {
	if s.IsEmpty() {
		err = fmt.Errorf("Stack is Empty")
		log.Println("Stack is Empty")
		return
	}
	s.length--
	r = s.data[s.length]
	return
}

//获取栈顶对象
func (s *stack) Peek() (r interface{}, err error) {
	if s.IsEmpty() {
		err = fmt.Errorf("Stack is Empty")
		log.Printf("Stack is Empty")
		return
	}
	r = s.data[s.length-1]
	return
}


/*
	搜索某一个item在该栈中的位置【位置为离栈顶最近的item与栈顶间距离】
	方法调用返回从堆栈中,对象位于顶部的基于1的位置。
*/
func (s *stack) Search(r interface{}) (post int64, err error) {
	post = int64(0)
	if s.IsEmpty() {
		err = fmt.Errorf("")
		log.Printf("Stack is Empty")
		return
	}

	for k, v := range s.data {
		if reflect.DeepEqual(v, r) {
			post = int64(s.length) - int64(k)
		}
	}
	return
}

//遍历栈
func (s *stack) Traverse(fn func(r interface{}), isTop2Bottom bool) {
	if isTop2Bottom {
		var i int64 = 0
		for ; i < s.length; i++ {
			fn(s.data[i])
		}
	} else {
		for i := s.length - 1; i >= 0; i-- {
			fn(s.data[i])
		}
	}
}

//栈的容量
func (s *stack) StackSize() int64 {
	return s.size
}

//栈的长度
func (s *stack) StackLen() int64 {
	return s.length
}

//判断是否栈为空
func (s *stack) IsEmpty() bool {
	return s.length == 0
}

//判断是否已经满了
func (s *stack) IsFull() bool {
	return s.length == s.size
}

//清空
func (s *stack) Clear()  {
	s.length = 0
	s.data = s.data[0:0]
}







點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
PHP開(kāi)發(fā)工程師
手記
粉絲
0
獲贊與收藏
1

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消