佇列簡介:
佇列(queue)是一種資料結構,可以在佇列的一端插入元素而在佇列的另一端刪除元素。
( 1 )允許刪除的一端稱為隊頭( front )。
( 2 )允許插入的一端稱為隊尾( rear )。
( 3 )當佇列中沒有元素時稱為空佇列。
( 4 )佇列亦稱作先進先出( first in first out )的線性表,簡稱為fifo 表。
佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾(即不允許 " 加塞 " ),每次離開的成員總是佇列頭上的(不允許中途離隊),即當前 " 最老的 " 成員離隊。
多工系統是乙個典型的佇列示例,在其中完成作業的排程。假設有五個程式等待執行, 它們將被放入乙個佇列,如果有第六個程式要執行,它將被放在佇列的末尾。佇列中首位的程式首先執行。
佇列實現:
/*(1)initqueue(q)
置空隊。構造乙個空佇列q。
(2)isempty(q)
判斷佇列是否空。若佇列q為空,則返回真值,否則返回假值。
(3)isfull(q)
判斷佇列是否以滿, 以滿返回true, 沒滿則返回flase
(4) addqueue(q,x)
若佇列q非滿,則將元素x插入q的隊尾。此操作簡稱 入隊 。
(5) delqueue(q)
若佇列q非空,則刪去q的隊頭元素,並返回該元素。此操作簡稱 出隊 。
(6) queuefront(q)
若佇列q非空,則返回隊頭元素,但不改變佇列q的狀態。
(7) queuedisplay(q)
顯示佇列中的元素。
*/#include "iostream.h"
#define maxsize 10 // 儲存資料大小, 可以隨便設定值
struct queue
;void initqueue( queue &q );
bool isempty( queue &q );
bool isfull( queue &q );
bool addqueue( queue &q, int x );
bool delqueue( queue &q );
int queuefront( queue &q );
bool queuedisplay( queue &q );
int main( void )
}cout << "隊頭: " << queuefront( q ) << endl; // 顯示隊頭
cout << "佇列所有元素:" << endl;
if ( queuedisplay( q ) == false ) // 顯示佇列所有元素
/* 出隊 */
for ( i = 0; i < 5; i++ )
}cout << endl;
cout << endl;
cout << "***************=== 出隊以後 *************************==" << endl;
cout << "出隊後隊頭: " << queuefront( q ) << endl; // 顯示隊頭
cout << "出隊後佇列所有元素:" << endl;
if ( queuedisplay( q ) == false ) // 顯示佇列所有元素
cout << endl;
cout << "輸入入隊5個數" << endl;
/* 再入隊 */
for ( i = 0; i < 5; i++ )
}cout << endl;
cout << endl;
cout << "***************=== 入隊以後 *************************==" << endl;
cout << "入隊後隊頭: " << queuefront( q ) << endl; // 顯示隊頭
cout << "入隊後佇列所有元素:" << endl;
if ( queuedisplay( q ) == false ) // 顯示佇列所有元素
return 0;
}/* 初始化佇列 */
void initqueue( queue &q )
}/* 判斷佇列是否為空, 為空返回true, 不為空則返回flase */
bool isempty( queue &q )
return true;
}/* 判斷佇列是否以滿, 以滿返回true, 沒滿則返回flase */
bool isfull( queue &q )
return true;
}/* 若佇列q非滿,則將元素x插入q的隊尾.此操作簡稱 入隊 */
bool addqueue( queue &q, int x )
int i;
for ( i = 0; i < maxsize; i++ )
q.data[i] = x;
q.rear = x; // 設隊尾,每新增乙個值,則該值即為隊尾
return true;}}
}/* 若佇列q非空,則刪去q的隊頭元素,並返回該元素. 此操作簡稱 出隊 */
bool delqueue( queue &q )
int i;
/* 刪除隊頭元素,並將所有佇列元素提前乙個位置 */
for ( i = 0; i < maxsize; i++ )
q.data[i] = q.data[i+1]; // 將佇列元素提前}}
/* 若佇列q非空,則返回隊頭元素,但不改變佇列q的狀態. */
int queuefront( queue &q )
return q.front; // 返回隊頭元素
}/* 顯示佇列中的元素 */
bool queuedisplay( queue &q )
int i;
for ( i = 0; i < maxsize; i++ )
cout << "第" << i + 1 << "個: " << q.data[i] << endl;}}
資料結構 c佇列實現
使用雙向鍊錶 include 佇列結點的結構 typedef struct qnodeqnode 佇列 typedef struct queue queue 初始化,注意這裡使用一級指標 void initqueue queue q 入隊 void enqueue queue q,int val 設...
資料結構 佇列和迴圈佇列
線性結構 只能從一端新增元素,從另外一端取出元素 先進先出 fifo 時間複雜度o 1 出隊時間複雜度o n public class arrayqueueimplements queue public arrayqueue override public int getsize override ...
資料結構(C實現) 鏈佇列
鏈佇列,即佇列的鏈式儲存結構,它是僅在表頭刪除和表尾插入的單鏈表,因此乙個鏈佇列需要設定兩個分別指示隊頭元素和隊尾元素的指標,為了操作方便,給鏈佇列新增乙個頭結點,並令隊頭指標指向頭結點,由此,空的鏈佇列的判斷條件就是隊頭指標和隊尾指標均指向頭結點。鏈佇列型別描述 typedef int qelem...