佇列 順序迴圈佇列

2021-10-03 18:53:24 字數 2810 閱讀 8441

順序佇列(sequence queue)用一片連續的儲存空間來儲存佇列中的資料元素. 用一維陣列來存放順序佇列中的資料元素。 隊頭位置設在陣列下標為 0 的端,用 front 表示; 隊尾位置設在陣列的另一端,用 rear 表示。  front 和 rear 隨著插入和刪除而變化。 當隊列為空時, front=rear=0。 因為在出佇列(刪除元素)的時候,需要花費大量 的時間移動大量元素,速度很慢,所以很少有實際 應用。

迴圈順序佇列,為了避免大量資料的移動,通常將一維陣列的各個元素看成乙個收尾相接的封閉的圓環,即第乙個元素是最後乙個元素的下乙個元素,這種形式的順序佇列成為迴圈順序佇列(circular sequence queue)。 c#為我們提供的queue類就是迴圈佇列。

namespace 佇列

public override string tostring()} }

namespace 佇列

//獲取元素個數

int getlength();

bool isempty(); //是否為空佇列

void clear(); //清空佇列

void enqueue(t item); //入隊

t dequeue(); //出隊

t peek(); //取隊頭元素} }

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 佇列

public cseqqueue(int capacity, float growfactor)

if (capacity < _defaultcapacity)

if (growfactor < 1.0 || growfactor > 10.0)

this._array = new t[capacity]; //初始化陣列

this._head = this._tail = 0;

this._size = 0;

this._growfactor = (int)(growfactor * 100f);

}//獲取元素個數

public int count

}public void clear()

//出隊操作

public t dequeue()

t obj = this._array[_head]; //出隊資料

this._array[_head] = default(t); //在陣列裡刪除出隊元素

this._head = (this._head + 1) % this._array.length; //迴圈佇列 處理機制,保證下標是迴圈的

this._size--;

return obj;

}//入隊

public void enqueue(t item)

//調整容量

setcapacity(capacity);

}this._array[_tail] = item; //入隊

this._tail = (this._tail + 1) % this._array.length; //移動尾巴指標

this._size++;

}private void setcapacity(int capacity)

else

this._array = destinationarray;

this._head = 0;

this._tail = (this._size == capacity) ? 0 : this._size;

}public int getlength()

public bool isempty()

//獲取隊頭元素,不刪除

public t peek()

t obj = this._array[_head]; //出隊資料

return obj;}}

}

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 佇列

for (int i = 0; i < 4; i++)

for (int i = 8; i < 13; i++)

for (int i = 0; i < 4; i++)

console.writeline("cqueue 獲取資料為:" + cqueue.peek() + ",佇列元素個數為: " + cqueue.count);

console.readkey();}}

}

迴圈佇列 順序佇列

在前兩篇中講述了順序佇列中的隊頭移動與不移動兩種順序佇列,今天討論順序佇列中的迴圈佇列,這種迴圈佇列是用一維陣列實現的。在隊頭移動的情況下,根據元素個數與佇列容量之間的數量關係來解決假溢位問題。從上圖中我們可以理解為什麼這種佇列結構可以解決假溢位問題,但是隨之而來,我們要如何判定迴圈佇列已滿呢?在此...

迴圈佇列 順序佇列(C )

佇列 queue 是一種限定訪問位置的線性變。他允許在表的一端插入,在另一端刪除。這個和計算機排程策略中的先來先服務fcfs first come first served 是一樣的。佇列中可以插入的一端為隊尾 rear 允許刪除的一端稱為隊頭 front 佇列也分為兩種,一種是用陣列的儲存表示,一...

佇列之順序佇列與迴圈佇列

一 佇列的概念 只能在表的一端進行插入操作,只能在表的另一端進行刪除操作,這種資料結構稱為 佇列。把允許插入的一端叫 隊尾 rear 允許刪除的一端叫 對頭 front 二 佇列的分類 佇列本身也是一種線性表,因而和線性表一樣也有順序和鏈式儲存結構兩種儲存方式。採用順序儲存結構實現的佇列稱為順序佇列...