欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang實現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解

 更新時間:2023年04月13日 09:51:03   作者:陪我去看海  
在計算機(jī)科學(xué)中,stack(棧)是一種基本的數(shù)據(jù)結(jié)構(gòu),它是一種線性結(jié)構(gòu),具有后進(jìn)先出(Last In First Out)的特點。本文將通過Golang實現(xiàn)堆棧,需要的可以參考一下

前言

始于此篇,為了學(xué)習(xí) Golang 基礎(chǔ),采用了使用 Golang 實現(xiàn)各種數(shù)據(jù)結(jié)構(gòu),以此來和 Golang 交朋友,今天的主題就是 把Stack介紹給Golang認(rèn)識

源碼:Stack

介紹Stack

在計算機(jī)科學(xué)中,stack(棧)是一種基本的數(shù)據(jù)結(jié)構(gòu),它是一種線性結(jié)構(gòu),具有后進(jìn)先出(Last In First Out)的特點。

上述是通過對 ChatGPT 提問:數(shù)據(jù)結(jié)構(gòu)stack。所得到的答案,我們這里拿出這句話的關(guān)鍵詞:線性結(jié)構(gòu),后進(jìn)先出。了解之后它的特性之后,應(yīng)該如何實現(xiàn)呢,它應(yīng)該包含哪些操作才叫stack呢?

通過ChatGPT的回答,我們可以知道我們需要實現(xiàn)的stack包含以下方法:

  • Push
  • Pop
  • Peek
  • Len
  • Cap
  • Clear

那就開始吧!

Stack

在 Golang 中,使用 struct結(jié)構(gòu)體可以模擬出棧的結(jié)構(gòu),分別有存儲元素的空間,棧的長度,棧的容量

type Element interface{}

type Stack struct {
	elements []Element
	top   int // 棧頂指針
	cap      int // 容量
}

Push

作用:Push 方法就是往stack的存儲區(qū)域壓入新的元素

// Push
func (stack *Stack) Push(element Element) (err error) {
	// top == cap時,棧滿
	if stack.top >= stack.cap {
		return errors.New("the stack is full")
	}
	stack.elements[stack.top] = element
	stack.top++
	return nil
}

Pop

作用:Pop 方法是取出棧頂元素,并且在存儲區(qū)域內(nèi)刪除

// Pop
func (stack *Stack) Pop() (ele Element, err error){
	// top == 0時,???
	if stack.top <= 0 {
		return nil, errors.New("the stack is empty")
	}
	ele = stack.elements[stack.top]
	// 在棧中清除當(dāng)前元素
	stack.elements = append(stack.elements, stack.elements[:stack.top], stack.elements[stack.top+1:])
	stack.top--
	return ele, nil
}

Peek

作用:Peek 方法就是返回棧頂?shù)闹?,但是不刪除存儲區(qū)域的元素

// Peek
func (stack *Stack) Peek() (ele Element, err error){
	if stack.top <= 0 {
		return nil, errors.New("the stack is empty")
	}
	ele = stack.elements[stack.top]
	return ele, nil
}

Len & Cap & Clear

  • Len:返回棧的存儲的元素個數(shù)
  • Cap:當(dāng)前棧的容量
  • Clear:將棧清空
// Len
func (stack *Stack) Len() int{
	return stack.top
}

// Cap
func (stack *Stack) Cap() int{
	return stack.cap
}

// Clear
func (stack *Stack) Clear() {
	if stack.top <= 0 {
		return
	}
	// 重新分配一個空切片
	stack.elements = stack.elements[:0]
	stack.top = 0
}

為了方便使用,還可以提供一個創(chuàng)建棧的方法:NewStack

NewStack

// 初始化棧
func NewStack(cap int) *Stack {
	elements := make([]Element, cap)
	return &Stack{
		elements: elements,
		top:   0,
		cap:      cap,
	}
}

使用

package main

import "fmt"

func main() {
	stack := NewStack(5)
	for i := 0; i < 4; i++ {
		var ele Element = i
		stack.Push(ele)
	}

	element, _ := stack.Pop()
	fmt.Println(element)

	peekEle, _ := stack.Peek()
	fmt.Println(peekEle)

	fmt.Println(stack.Len())
	fmt.Println(stack.Cap())

	stack.Clear()
}

以上就是Golang實現(xiàn)數(shù)據(jù)結(jié)構(gòu)Stack(堆棧)的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Golang數(shù)據(jù)結(jié)構(gòu)Stack的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 從零封裝Gin框架實現(xiàn)數(shù)據(jù)庫初始化GORM

    從零封裝Gin框架實現(xiàn)數(shù)據(jù)庫初始化GORM

    這篇文章主要為大家介紹了從零封裝Gin框架實現(xiàn)數(shù)據(jù)庫初始化GORM,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • go高并發(fā)時append方法偶現(xiàn)錯誤解決分析

    go高并發(fā)時append方法偶現(xiàn)錯誤解決分析

    這篇文章主要為大家介紹了go高并發(fā)時append方法偶現(xiàn)錯誤解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳解如何利用GORM實現(xiàn)MySQL事務(wù)

    詳解如何利用GORM實現(xiàn)MySQL事務(wù)

    為了確保數(shù)據(jù)一致性,在項目中會經(jīng)常用到事務(wù)處理,對于MySQL事務(wù)相信大家應(yīng)該都不陌生。這篇文章主要總結(jié)一下在Go語言中Gorm是如何實現(xiàn)事務(wù)的;感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-09-09
  • 探索Golang實現(xiàn)Redis持久化AOF實例

    探索Golang實現(xiàn)Redis持久化AOF實例

    這篇文章主要為大家介紹了Golang實現(xiàn)Redis持久化AOF實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • GoLang實現(xiàn)日志收集器流程講解

    GoLang實現(xiàn)日志收集器流程講解

    這篇文章主要介紹了GoLang實現(xiàn)日志收集器流程,看日志是開發(fā)者平時排查BUG所必須的掌握的技能,但是日志冗雜,所以寫個小工具來收集這些日志幫助我們排查BUG,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • go語言結(jié)構(gòu)體指針操作示例詳解

    go語言結(jié)構(gòu)體指針操作示例詳解

    這篇文章主要為大家介紹了go語言結(jié)構(gòu)體指針操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 一文詳解Golang中的匿名變量

    一文詳解Golang中的匿名變量

    匿名變量是一種特殊類型的變量,可以簡化代碼并提高可讀性,本文將為大家詳細(xì)介紹一下golang中匿名變量的定義、特性和使用方法,需要的可以參考下
    2023-09-09
  • Go 驗證字符串中是否包含中文(推薦)

    Go 驗證字符串中是否包含中文(推薦)

    這篇文章主要介紹了Go 驗證字符串中是否包含中文,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • go語言中的二維切片賦值

    go語言中的二維切片賦值

    這篇文章主要介紹了go語言中的二維切片賦值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • go流程控制代碼詳解

    go流程控制代碼詳解

    這篇文章主要介紹了go流程控制,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05

最新評論