天天看點

C語言資料結構(7)--隊列

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;
}
      

繼續閱讀