新聞中心
這期內容當中小編將會給大家?guī)碛嘘PGolang數(shù)組如何實現(xiàn)stack和queue數(shù)據(jù)結構,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
網(wǎng)站設計制作、網(wǎng)站設計服務團隊是一支充滿著熱情的團隊,執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標準與要求,同時竭誠為客戶提供服務是我們的理念。成都創(chuàng)新互聯(lián)公司把每個網(wǎng)站當做一個產品來開發(fā),精雕細琢,追求一名工匠心中的細致,我們更用心!
棧是一系列對象的組成的集合,具有先進后出的原則。
棧是最簡單的數(shù)據(jù)結構也是最重要的數(shù)據(jù)結構,它的增刪查看都是在棧頂操作的,它具有以下屬性:
s.push(e) : 將一個e元素添加到棧頂;
s.pop(): 在stack中刪除棧頂元素并且返回;
s.isEmpty(): 如果棧為空,返回true
s.len(): 返回棧的長度
s.top(): 返回棧頂數(shù)據(jù)
下面用數(shù)組實現(xiàn)棧:
package main
import (
"errors"
"fmt"
)
var (
stackIsNil = errors.New("empty stack")
)
type stack []int
// Push 往stack頂部插入數(shù)據(jù)
func (s *stack) Push(e int) {
*s = append(*s, e)
return
}
// Pop 刪除stack頂部數(shù)據(jù)并且返回刪除的數(shù)據(jù)
func (s *stack) Pop() (ret int, err error) {
if len(*s) == 0 {
return 0, stackIsNil
}
temp := *s
ret = temp[len(temp)-1]
temp = temp[:len(temp)-1]
*s = temp
return
}
// IsEmpty 判斷是否為空
func (s *stack) IsEmpty() bool {
return len(*s) == 0
}
// Top 獲取stack頂部數(shù)據(jù)
func (s *stack) Top() (int, error) {
if len(*s) == 0 {
return 0, stackIsNil
}
temp := *s
return temp[len(temp)-1], nil
}
// Len 獲取stack長度
func (s *stack) Len() int {
return len(*s)
}
func main() {
s := new(stack)
// 插入1
s.Push(1)
// 插入2
s.Push(2)
// 插入5
s.Push(5)
// 獲取長度
fmt.Println(s.Len()) // 3
// 獲取stack頂部數(shù)據(jù)
fmt.Println(s.Top()) // 5
// 刪除頂部數(shù)據(jù)
fmt.Println(s.Pop()) // 5
// 獲取長度
fmt.Println(s.Len()) // 2
// 判斷是否為空stack
fmt.Println(s.IsEmpty())
}
隊列也是一系列對象組成的集合,它具有先進先出的原則。
隊列的特點是訪問和刪除限制在隊列的第一個元素,插入被限制在隊列的尾部,隊列的屬性:
q.enqueue(e): 向隊列尾部插入一個元素;
q.dequeue(): 刪除并且返回第一個元素,如果隊列為空則報錯;
q.first(): 不刪除元素,直接返回第一個元素,如果為空則報錯;
q.isEmpty(): 隊列為空返回true;
q.len(): 返回隊列長度。
數(shù)組實現(xiàn)隊列代碼:
package main
import (
"errors"
"fmt"
)
var (
ErrNilQueue = errors.New("queue is nil")
)
type queue []int
// Enqueue 隊列尾部插入數(shù)據(jù)
func (q *queue) Enqueue(e int) {
*q = append(*q, e)
}
// Dequeue 隊列刪除第一個元素
func (q *queue) Dequeue() (ret int, err error) {
if len(*q) == 0 {
err = ErrNilQueue
return
}
temp := *q
ret = temp[0]
temp = temp[1:]
*q = temp
return
}
// First 返回第一個數(shù)據(jù)
func (q *queue) First() (ret int, err error) {
if len(*q) == 0 {
err = ErrNilQueue
return
}
temp := *q
ret = temp[0]
return
}
func (q *queue) IsEmpty() bool {
return len(*q) == 0
}
func (q *queue) Len() int {
return len(*q)
}
func main() {
q := new(queue)
q.Enqueue(1)
q.Enqueue(10)
q.Enqueue(20)
fmt.Println(q.First()) // 1
fmt.Println(q.Dequeue()) // 1
fmt.Println(q.First()) // 10
fmt.Println(q.IsEmpty()) // false
fmt.Println(q.Len()) // 2
fmt.Println(q.Dequeue()) //10
fmt.Println(q.Len()) // 1
}
上述就是小編為大家分享的Golang數(shù)組如何實現(xiàn)stack和queue數(shù)據(jù)結構了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁標題:Golang數(shù)組如何實現(xiàn)stack和queue數(shù)據(jù)結構
本文來源:http://www.dlmjj.cn/article/ipscoi.html