線性結構 佇列 Queue

2021-08-22 11:41:03 字數 2019 閱讀 8307

像棧一樣,佇列(queue)也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊(push)要排在隊尾(rear),每次出隊(pop)的都是隊首(front)的人。如圖1,描述了乙個佇列模型。

佇列(queue)與棧一樣,是一種線性儲存結構,它具有如下特點:

佇列中的資料元素遵循「先進先出」(first in first out)的原則,簡稱fifo結構。

在隊尾新增元素,在隊頭刪除元素。

例如:去銀行取錢的排隊;

* enqueue向佇列中新增資料

* @value 泛型

*/func (q *queue) enqueue(value inte***ce{}) inte***ce{}

/** * dequeue先隊首取出資料

*/func (q *queue) dequeue() inte***ce{}

rel := q.c[0]

q.c = q.c[1:]

return rel

}/**

* getqueue展示全部的佇列

*/func (q *queue) getqueue() inte***ce{}

package main

import (

"./arr"

"fmt"

)func main()

大小為c的迴圈佇列中front為當前隊頭元素位置,tail為當前隊尾元素位置(最後乙個元素的位置),如果fronttail-front+1,但是如果front>tail,佇列中的元素個數為:(tail-front+c).此時該佇列是迴圈佇列.

package arr

import "log"

type loopqueue struct

size int //指定迴圈佇列的長度

}//定義首位尾位置是0

var (

front = 0

tail = 0

)/**

* loopenqueue迴圈佇列的入隊

* @value 泛型

*/func (l *loopqueue) loopenqueue(value inte***ce{})

//定義slice

if len(l.d) == 0 , l.size)

} l.d[tail] = value

tail = (tail + 1) % l.size

}/**

* loopdequeue迴圈佇列的出隊

*/func (l *loopqueue) loopdequeue() inte***ce{}

rel := l.d[front]

l.d[front] = nil

front = (front + 1) % l.size

return rel

}

package main

import (

"./arr"

"fmt"

)func main()

最後提一句:相對於佇列來說,迴圈佇列的效能更加的優秀,兩種資料結構對效能的影響基本相差100多倍.

資料結構 佇列 queue

佇列 就是生活中的排隊,因此排隊是先到先得,也是先離開隊伍,因此佇列也是採用的先進先出的概念 fifo,慢慢想想作業系統裡面是不是也用到fifo,自己去查吧 到底有沒有 如何能夠準確的定位是先進先出呢,因此採用的就是頭指標front和尾指標rear,通常這兩個指標是封裝成乙個鏈隊 注意front與r...

資料結構 佇列 queue

佇列 queue 是一種採用先進先出 fifo 策略的抽象資料結構,它的想法來自於生活中排隊的策略。顧客在付款結賬的時候,按照到來的先後順序排隊結賬,先來的顧客先結賬,後來的顧客後結賬。同棧的實現一樣,佇列的實現也有陣列實現和鍊錶實現兩種方式。先來看看陣列實現的方法。棧使用top變數記錄棧頂的位置,...

資料結構 佇列queue

佇列 佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列是有序集合,新新增的一端為隊尾,另一端為隊頭,當乙個元素從隊尾進入佇列時,一直...