在本期中,边肖将为您带来关于Golang数组如何实现堆栈和队列数据结构的信息。文章内容丰富,从专业角度进行分析和描述。看完这篇文章,希望你能有所收获。
堆栈是一系列对象的集合,原则是先进先出。
栈是最简单也是最重要的数据结构。它的添加、删除和查看都在栈顶操作。它具有以下属性:
S.push(e) :在堆栈顶部添加了一个e元素;
S.pop():删除堆栈中的顶部元素并返回;
如果堆栈为空,则返回true。
S.len():返回堆栈的长度。
S.top():返回栈顶数据。
堆栈通过如下数组实现:
包装主体
导入(
错误
fmt ‘
)
var(
stackIsNil=错误。新建(“空堆栈”)
)
类型堆栈[]int
//Push将数据插入堆栈顶部
函数(s *堆栈)推送(e int){ 0
*s=追加(*s,e)
返回
}
//Pop删除栈顶数据,返回删除的数据。
func (s *stack) Pop() (ret int,err err error){ 0
if len(* s)=0 {
返回0,堆栈为零
}
温度:=*s
ret=temp[len(temp)-1]
temp=temp[:len(temp)-1]
*s=温度
返回
}
//IsEmpty确定它是否为空。
func (s *stack) IsEmpty() bool {
返回透镜(* s)=0
}
//顶部获取堆栈的顶部数据
func (s *stack) Top() (int,错误){ 0
if len(* s)=0 {
返回0,堆栈为零
}
温度:=*s
返回温度[len(temp)-1],零
}
//Len获取堆栈长度
func (s *stack) Len() int {
返回镜头
}
func main(){ 0
s :=新(堆栈)
//插入1
南推动(1)
//插入2
南推动(2)
//插入5
南推动(5)
//获取长度
fmt。Println(s.Len()) //3
//获取栈顶数据
fmt。Println(s.Top()) //5
//删除顶部数据
fmt。Println(s.Pop()) //5
//获取长度
fmt。Println(s.Len()) //2
//判断是否为空栈
fmt。Println(s.IsEmpty())
} Queue也是一系列对象的集合,具有先进先出的原则。
队列的特点是访问和删除仅限于队列的第一个元素,插入仅限于队列的尾部。队列的属性有:
将一个元素插入队列的尾部;
q . queue():删除并返回第一个元素,如果队列为空,将报告错误;
Q.first():直接返回第一个元素,不删除元素,如果为空,会给出错误;
Q.isEmpty():返回true当队列为空时;
Q.len():返回队列长度。
数组实现队列代码:
包装主体
导入(
错误
fmt ‘
)
var(
ErrNilQueue=错误。新建(“队列为零”)
)
类型队列[]int
//将队列尾部插入数据
func(q * queue)Enqueue(e int){ 0
*q=追加(*q,e)
}
//出列队列删除第一个元素
func (q *queue)出列()(ret int,err error){ 0
if len(*q)==0 {
err=ErrNilQueue
返回
}
temp :=*q
ret=温度[0]
temp=temp[1:]
*q=温度
返回
}
//First返回第一个数据
func (q *queue) First() (ret int,err error){ 0
if len(*q)==0 {
err=ErrNilQueue
返回
}
temp :=*q
ret=温度[0]
返回
}
func (q *queue) IsEmpty() bool {
返回透镜(* q)=0
}
func (q *queue) Len() int {
返回透镜(*q)
}
func main(){ 0
q :=新(队列)
排队(1)
排队(10)
排队(20)
fmt。Println(q.First()) //1
fmt。Println(q .出列())//1
fmt。Println(q.First()) //10
fmt。Println(q.IsEmpty()) //false
fmt。Println(q.Len()) //2
fmt。Println(q .出列())//10
fmt。Println(q.Len()) //1