二 佇列再探之迴圈佇列

2021-10-10 05:06:39 字數 2044 閱讀 1819

//佇列再探(類似排隊)[先進先出](迴圈佇列)

//日期:11.3

//變化:順序佇列 變成 迴圈佇列(關鍵:用取餘操作實現在陣列的範圍內 和 迴圈佇列隊滿條件 ,注意這裡會多乙個空餘資料空間 )

//

//建議:畫圖理解最佳

#include //包含malloc函式的標頭檔案

#include struct queue;

typedef struct queue queue; //設定別名,方便後續宣告

queue *create_queue(int len);

void destroy_queue(queue *queue);

void enqueue(queue* queue,int num);

void dequeue(queue* queue);

void front(queue *queue);

void rear(queue *queue);

int is_full(queue *queue);

int is_empty(queue *queue);

int main()

//建立空間

queue *create_queue(int len)

//釋放空間,銷毀佇列

void destroy_queue(queue *queue)

//進入佇列[rear++]

void enqueue(queue* queue,int num)

queue->array[queue->rear] = num; //由**知,rear指向的位置為空資料的位置,所以先賦值再自增

printf("%d enter the queue!\n", queue->array[queue->rear]);

queue->rear = (queue->rear + 1) % queue->size; //迴圈佇列,例子:1%3=1 4%3=1(用求餘操作來實現尾部在陣列下標的範圍)(一定程度相當於rear++)

// queue->rear++; //原有的位置後移(順序佇列)

//printf("%d",queue->rear);

}//退出佇列(從隊頭開始出)[front++]

void dequeue(queue* queue)

int temp = queue->array[queue->front];

queue->array[queue->front] = null;

queue->front = (queue->front + 1) % queue->size; //迴圈佇列,例子:1%3=1 4%3=1(用求餘操作來實現尾部在陣列下標的範圍)(一定程度相當於front++)

// queue->front++; 順序佇列

printf("%d get out of the queue!\n",temp);

return;

}//顯示當前頭的資料

void front(queue *queue)

printf("the front is %d\n",queue->array[queue->front]);

return;

}//顯示當前尾的資料

void rear(queue *queue)

//注意這裡是迴圈佇列,rear如果在第乙個位置的話,**應該改進

if( queue->rear == 0 )

printf("the rear is %d\n",queue->array[queue->rear-1]);//因為rear指向的是末尾空資料的位置,所以需要-1

return;

}//判斷資料容量是否已經滿了

int is_full(queue *queue)

else

}//判斷此時資料是否為空[front == rear]

int is_empty(queue *queue) else

}

二 佇列(直線佇列和環形佇列)

佇列是乙個有序列表,可以用陣列或者鍊錶來實現,遵循先入先出的原則。front指向佇列頭的資料前乙個位置,rear指向隊尾元素。利用者兩個變數front及rear分別記錄佇列前後端的下標,front會隨著資料輸出而改變,而rear則是隨著資料輸入而改變。下面利用陣列建立乙個含有三個元素的佇列,及注釋如...

rabbitmq學習二 佇列

require once dir vendor autoload.php use phpamqplib connection amqpstreamconnection use phpamqplib message amqpmessage 1.鏈結伺服器 connection new amqpstre...

資料結構 03佇列與迴圈佇列

佇列queue,是乙個有序列表,可以用陣列和鍊錶實現 先進先出,如銀行業務辦理 用陣列模擬佇列 隊尾 rear rear會隨著資料的輸入而不斷增加 隊首 front front會隨著資料的輸出而不斷增加 佇列的長度 rear front 1 最大容量 maxsize 注 這張圖有問題,而且,fron...