資料結構之佇列(Queue)

ice_moss發表於2021-06-18

一、介紹

佇列:是一種特殊的線性表特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。

二、邏輯

例:現有一個空佇列
1.新增元素:q{ },我們向佇列中加入(push)元素,push(1)
則 q{ 1 },繼續加入元素push(2),push(3),現在佇列中就有q {1, 2, 3}(加入的元素一定是在加入的上一個元素之後。

2.移除元素:使用pop()方法,將元素移除(注意:每次只能移除一個元素,並且是移除最早進入佇列的元素),如:呼叫一次pop(),則q {2, 3},繼續呼叫pop(),則去{ 3 }。

3.判斷佇列是否為空:使用IsImpty(),如果返回為turn,則為空佇列,false則中為空。

三、程式碼實現(Go)

package queue

type Queue []int

//加入元素
//這裡需要使用指標
func (q *Queue) Push(v int){
   *q = append(*q, v)
}

//移除元素
func (q *Queue) Pop() int {
   head := (*q)[0]
   *q = (*q)[1:]
   return head
}

//判斷是否為空
func (q *Queue)IsImpty() bool{
   return len((*q)) == 0
}

下面寫一個測試:

package main

import (
   "awesomeProject/tree/queue"
 "fmt")

func main() {
   q := queue.Queue{1}
   q.Push(2)
   q.Push(3)
   q.Pop()
   fmt.Println(q)
   fmt.Println(q.IsImpty())
   fmt.Println(q.Pop())
   fmt.Println(q.Pop())
   fmt.Println(q.IsImpty())

其輸出如下:

[2 3]
false
2
3
true
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章