順序佇列(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 二 佇列的分類 佇列本身也是一種線性表,因而和線性表一樣也有順序和鏈式儲存結構兩種儲存方式。採用順序儲存結構實現的佇列稱為順序佇列...