數據結構之Go實現隊列

隊列的相關概念

隊列(queue)也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊(push)要排在隊尾(rear),每次出隊(pop)的都是隊首(front)的人。其特點如下:
1.隊列中的數據元素遵循“先進先出”(First In First Out)的原則,簡稱FIFO結構。
2.隊尾添加元素,在隊頭刪除元素。
假如我們有一個存儲整型元素的隊列,我們依次入隊1、2、3.
在這裏插入圖片描述

其代碼實現如下:

package main

import (
	"errors"
	"fmt"
	"os"
)

//使用一個結構體管理
type Queue struct {
	maxSize int//數組最大值
	array [5]int//模擬隊列
	front int//指向隊列首
	rear int//表示指向隊列尾
}
//添加數據到隊列
func (this *Queue)AddQueue(val int)(err error){
	//判斷隊列是否已滿
	if this.rear == this.maxSize-1{//rear隊列尾部,含最後的元素
	return errors.New("queue full")

	}
	this.rear++
	this.array[this.rear]=val
	return
}
//從隊列中取
func(this *Queue)GetQueue()(val int,err error){
	//判斷書否爲空
	if this.rear==this.front{//隊空

	return -1 ,errors.New("queue empty")
	}
	this.front++
	val=this.array[this.front]
	return val,err
}
func(this *Queue)showQueue(){
	for i:=this.front+1;i<=this.rear;i++{
fmt.Printf("array[%d]=%d\t",i,this.array[i])
	}
	fmt.Println()
}
func main() {
	//先創建一個隊列
	queue:= &Queue{
		maxSize: 5,
		front:   -1,
		rear:    -1,
	}
	var key string
	var val int
	for{
		fmt.Println("1.輸入add表示添加數據到隊列 ")
		fmt.Println("2.輸入get表示獲取數據到隊列 ")
		fmt.Println("3.輸入show表示顯示數據到隊列 ")
		fmt.Println("4.輸入exit表示退出數據到隊列 ")
	fmt.Scanln(&key)
		switch key {
		case "add":
			fmt.Println("請輸入你要的入隊列數")
			fmt.Scanln(&val)
			err:=queue.AddQueue(val)
			if err!=nil{
				fmt.Println(err.Error())
			}else{
				fmt.Println("加入隊列OK")
			}
		case "get":
			val,err:=queue.GetQueue()
			if err!=nil{
				fmt.Println(err.Error())
			}else{
				fmt.Println("取出來一個數=",val)
			}

			case"show":
				queue.showQueue()
		case "exit":
			os.Exit(0)

		}

	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章