package main
import (
"fmt"
)
type Node struct {
val int
pNext *Node
}
type Queue struct {
pFront,pRear *Node
}
func isempty(q *Queue) bool {
if q.pFront==nil && q.pRear==nil {
return true
}else {
return false
}
}
func clear(q *Queue){
if isempty(q) {
return
}
q.pRear=nil
q.pFront=nil
}
func enqueue(q *Queue,val int) {
pNew:=new(Node)
pNew.val=val
pNew.pNext=nil
if q.pFront==nil && q.pRear==nil{
q.pFront=pNew
q.pRear=pNew
return
}else {
q.pRear.pNext = pNew
q.pRear = pNew
}
}
func dequeue(q *Queue)(bool,int) {
if isempty(q) {
return false,0
}
reval:=q.pFront.val
if q.pFront==q.pRear {
q.pFront=nil
q.pRear=nil
return true,reval
}
q.pFront=q.pFront.pNext
return true,reval
}
func traverse(q *Queue){
if isempty(q) {
return
}
for p:=q.pFront;p!=nil;p=p.pNext {
fmt.Println(p.val)
}
}
func main() {
q:=new(Queue)
enqueue(q,1)
enqueue(q,2)
enqueue(q,3)
enqueue(q,4)
traverse(q)
rebool,reval:=dequeue(q)
if rebool {
fmt.Printf("出队成功,出队值为:%d\n",reval)
}else {
fmt.Println("出队失败")
}
traverse(q)
}