像棧一樣,佇列(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 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列是有序集合,新新增的一端為隊尾,另一端為隊頭,當乙個元素從隊尾進入佇列時,一直...