1. 隊列的概念
什麼是隊列,聽起來很高端,其實就是最普通的排隊。
先排隊的,先取票;先排隊的,先取餐;先排隊的,先上船;先排隊的,先上岸。
隊列,就是先進先出。
2. 隊列的存儲
首先隊列也是一個一維資料結構,然後添加、和取出元素都是從頭部操作即可。可以把隊列看做從左到右排列的元素集合,添加元素和取出元素都是在左側操作。
隊列可以使用一位數組或者連結清單存儲,使用數組的稱為順序隊列,使用連結清單的稱為鍊隊列。
3. 隊列的操作
老三樣,周遊、添加、取出。
周遊,按順序顯示所有隊列元素
添加,在隊列左側添加一個元素
取出,在隊列左側取出一個元素
4. 順序隊列的代碼實作
不多說,都在酒裡…sorry,都在代碼裡:
/*
* 順序隊列實作
* 作者:熊貓大大
* 時間:2019-09-28
*/
#include<stdio.h>
#define QUEUE_LENGTH 100 //隊列最大元素個數
// 隊列結構體
struct Queue
{
int element[QUEUE_LENGTH];//隊列元素
int head;//頭部位置
int tail;//尾部位置
};
//周遊
void printQueue(struct Queue* p)
{
int position = p->head;
printf("======隊列周遊:");
while (position != p->tail)
{
printf("%d ", p->element[position]);
position++;
}
printf("\n");
}
//入隊
int queueIn(struct Queue* p, int num)
{
//滿了
if (p->tail>QUEUE_LENGTH - 1)
{
return 0;//入隊失敗
}
p->element[p->tail] = num;
p->tail++;
return 1;
}
// 出隊
int queueOut(struct Queue* p, int *result)
{
if (p->head == p->tail)
return 0;//出隊失敗
*result = p->element[p->head++];
return 1;
}
// 測試
int main()
{
//初始化
struct Queue queue;
queue.head = 0;
queue.tail = 0;
queueIn(&queue, 1);
queueIn(&queue, 2);
queueIn(&queue, 3);
printQueue(&queue);
int result;
queueOut(&queue, &result);
printf("出隊:%d\n", result);
queueOut(&queue, &result);
printf("出隊:%d\n", result);
queueIn(&queue, 4);
printQueue(&queue);
return 1;
}