Golang数组如何实现stack和queue数据结构
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这期内容当中小编将会给大家带来有关Golang数组如何实现stack和queue数据结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。栈是一系列对象的组成的集合,具
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
qq网络安全概念
河南服务器电源哪个品牌好
513所搞软件开发吗
数据库系统正确叙述
小学生网络安全表演节目
安徽掌游软件开发有限公司
中服云北京网络技术有限公司
可以像数据库表一样使用
unity3d 数据库
网络安全需要考什么证件
网络安全专业建设工作方案
北大青鸟ktv项目数据库
安庆有哪些网络技术有限公司
u盾转账找不到dns服务器
数据库三种存储引擎的适用情况
南京泰治软件开发面试
差旅天下网络技术股份有限公司
网络安全教育活动记载
生产企业的数据库系统设计
五张网络安全
网络安全知识手抄报 宣传栏
物联网服务器网关
文件版本存储管理服务器
北京移动软件开发平台
水产软件开发
如何用数据库筛选环状RNA
joule期刊在哪个数据库
北大青鸟ktv项目数据库
dhcp服务器地址和ipv4
网络技术实力