Golang数组如何实现stack和queue数据结构
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这期内容当中小编将会给大家带来有关Golang数组如何实现stack和queue数据结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。栈是一系列对象的组成的集合,具
千家信息网最后更新 2025年12月02日Golang数组如何实现stack和queue数据结构
这期内容当中小编将会给大家带来有关Golang数组如何实现stack和queue数据结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
栈是一系列对象的组成的集合,具有先进后出的原则。
栈是最简单的数据结构也是最重要的数据结构,它的增删查看都是在栈顶操作的,它具有以下属性:
s.push(e) : 将一个e元素添加到栈顶;
s.pop(): 在stack中删除栈顶元素并且返回;
s.isEmpty(): 如果栈为空,返回true
s.len(): 返回栈的长度
s.top(): 返回栈顶数据
下面用数组实现栈:
package main
import (
"errors"
"fmt"
)
var (
stackIsNil = errors.New("empty stack")
)
type stack []int
// Push 往stack顶部插入数据
func (s *stack) Push(e int) {
*s = append(*s, e)
return
}
// Pop 删除stack顶部数据并且返回删除的数据
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顶部数据
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顶部数据
fmt.Println(s.Top()) // 5
// 删除顶部数据
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(): 返回队列长度。
数组实现队列代码:
package main
import (
"errors"
"fmt"
)
var (
ErrNilQueue = errors.New("queue is nil")
)
type queue []int
// Enqueue 队列尾部插入数据
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 返回第一个数据
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数组如何实现stack和queue数据结构了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
数据
队列
元素
长度
顶部
数据结构
数组
结构
尾部
先进
内容
原则
对象
属性
分析
限制
重要
专业
中小
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ftp服务器转移
数据库格式函数
70级怀旧服部落服务器
ntp服务器 精度
金铲铲时空裂痕服务器多的分宗师
软件开发可以考什么研究生
中学生网络安全法知识竞赛
重庆巫溪仓储生鲜软件开发
我的服务器
itunes联系服务器没反应
如何设置word数据库域
林业3s技术建数据库
街道网络安全会议发言稿
2008数据库删除数据库
武汉融众网络技术中心
mac 桌面股票软件开发
A320 导航数据库查看
软件开发省钱技巧
切削数据库的总体结构
数据库附加不了
顺平软件开发技术
学计算机网络技术看什么书
银行业 网络安全
数据库密码md5加密怎样修改
达梦数据库update不生效
美国年报数据库
51openlab服务器
木马病毒软件开发
网易云接口数据库
合肥星合网络技术有限公司