資料結構 C 佇列實現和佇列簡介

2021-06-06 17:22:51 字數 3126 閱讀 2964

佇列簡介:

佇列(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...