go實現隊列

                           只有用水將心上的霧氣淘洗乾淨,榮光纔會照亮最初的夢想。

                                                                                          ——加西亞·馬爾克斯

上代碼

package main

import (
	"fmt"
	"os"
)

type Queue struct {
	List []int
}

// 創建一個新隊列
func newQueue(len int) *Queue {
	// 這裏加了個判斷,創建時可以傳入隊列長度,滿了就不能添加。你也可以不用傳參,直接list := make([]int, 0),然後不用判斷滿沒滿即可
	if len == 0 {
		fmt.Println("queue don't allow empty.")
		os.Exit(0)
	}

	list := make([]int, 0, len)
	return &Queue{List: list}
}

// 入隊一個數據
func (q *Queue) inQ(data int) {
	if len(q.List)+1 > cap(q.List) {
		fmt.Print("隊列已滿,數值:", data, "無法入隊!  len=", len(q.List), "\t,cap=", cap(q.List), "\t當前隊列數據:")
		q.printQ()
		os.Exit(0)
	}
	q.List = append(q.List, data)
}

// 出隊一個數據
func (q *Queue) popQ() int {
	if len(q.List) == 0 {
		fmt.Println("queue is empty.")
		os.Exit(0)
	}

	data := q.List[0]
	q.List = append(q.List[1:])
	return data
}

// 遍歷隊列的每個值
func (q *Queue) printQ() {
	for _, value := range q.List {
		fmt.Print(value, "\t")
	}
}

func main() {
	q := newQueue(5)
	fmt.Println("創建的新隊列:", *q, "容量:", cap(q.List), "  長度:", len(q.List))
	q.inQ(6)
	q.inQ(7)
	q.inQ(8)
	q.inQ(9)
	fmt.Println("入隊新值,打印隊列數據:")
	q.printQ()
	fmt.Println("當前隊列:", *q, "  ,容量:", cap(q.List), "  ,長度:", len(q.List))
	data := q.popQ()
	fmt.Println("彈出一個值:", data)
	fmt.Println("當前隊列:")
	q.printQ()
	data1 := q.popQ()
	fmt.Println("\n彈出一個值:", data1)
	data2 := q.popQ()
	fmt.Println("彈出一個值:", data2)
	data3 := q.popQ()
	fmt.Println("彈出一個值:", data3)
	fmt.Println("當前隊列:", *q)

	// 創建長度爲3的隊列,但是入隊時準備了四個數據
	q2 := newQueue(3)
	fmt.Println("創建的新隊列:", *q2, "容量:", cap(q2.List), "  長度:", len(q2.List))
	q2.inQ(6)
	q2.inQ(7)
	q2.inQ(8)
	fmt.Println("當前隊列:", q2.List)
	q2.inQ(9) // 將無法入隊
}

控制檯:

創建的新隊列: {[]} 容量: 5   長度: 0
入隊新值,打印隊列數據:
6	7	8	9	當前隊列: {[6 7 8 9]}   ,容量: 5   ,長度: 4
彈出一個值: 6
當前隊列:
7	8	9	
彈出一個值: 7
彈出一個值: 8
彈出一個值: 9
當前隊列: {[]}
創建的新隊列: {[]} 容量: 3   長度: 0
當前隊列: [6 7 8]
隊列已滿,數值:9無法入隊!  len=3	,cap=3	當前隊列數據:6	7	8	
Process finished with exit code 0

 

 

 

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