C 言語/C++ キューの詳細なチュートリアルと完全なコード実装

C 言語/C++ キューの詳細なチュートリアルと完全なコード実装

キューは一般的に使用されるデータ構造であり、先入れ先出し (FIFO) の原則に従います。つまり、最初にキューに入った要素が最初に取り出されます。キューを使用すると、タスクのスケジュール設定、メッセージ配信など、多くの実際的な問題を解決できます。このチュートリアルでは、キューの概念、基本操作、および C 言語でのキューの実装方法を詳しく紹介します。

キューの概念

キューは、エンキューとデキューという 2 つの基本操作を含む線形データ構造です。エンキュー操作はキューの末尾に要素を追加し、デキュー操作はキューの先頭要素を削除して返します。

キューの機能:

  • 先入れ先出し (FIFO): 最初にキューに入った要素が最初に取り出されます。
  • エンキュー操作は、キューの末尾と呼ばれるキューの一方の端でのみ実行できます。
  • デキュー操作は、キューの先頭と呼ばれるキューのもう一方の端でのみ実行できます。

キューの基本操作

キューの基本的な操作には次のものがあります。

  • キューの作成: 空のキューを初期化します。
  • エンキュー操作: 要素をキューの末尾に追加します。
  • デキュー操作: キューの先頭要素を削除して返します。
  • Null判定動作:キューが空かどうかを判定します。
  • フル判定動作:キューがフルかどうかを判定します。
  • キューの先頭要素を取得します。キューの先頭要素を返しますが、削除はしません。

キューの実装

C 言語でキューを実装するコードは次のとおりです。

#include <stdio.h>
#define MAX_SIZE 100

// 定义队列结构
typedef struct {
    
    
    int data[MAX_SIZE];
    int front;
    int rear;
} Queue;

// 初始化队列
void initQueue(Queue *queue) {
    
    
    queue->front = queue->rear = 0;
}

// 判断队列是否为空
int isEmpty(Queue *queue) {
    
    
    return queue->front == queue->rear;
}

// 判断队列是否已满
int isFull(Queue *queue) {
    
    
    return queue->rear == MAX_SIZE;
}

// 入队
void enqueue(Queue *queue, int item) {
    
    
    if (isFull(queue)) {
    
    
        printf("队列已满,无法入队!\n");
        return;
    }
    queue->data[queue->rear++] = item;
}

// 出队
int dequeue(Queue *queue) {
    
    
    if (isEmpty(queue)) {
    
    
        printf("队列为空,无法出队!\n");
        return -1;
    }
    return queue->data[queue->front++];
}

// 获取队列长度
int getSize(Queue *queue) {
    
    
    return queue->rear - queue->front;
}

// 打印队列中的所有元素
void printQueue(Queue *queue) {
    
    
    if (isEmpty(queue)) {
    
    
        printf("队列为空!\n");
        return;
    }
    printf("队列中的元素为:");
    for (int i = queue->front; i < queue->rear; i++) {
    
    
        printf("%d ", queue->data[i]);
    }
    printf("\n");
}

int main()
{
    
    
    Queue queue;
    initQueue(&queue);
  
    enqueue(&queue, 10);
    enqueue(&queue, 20);
    enqueue(&queue, 30);
  
    printQueue(&queue); // 队列中的元素为:10 20 30
  
    printf("出队元素:%d", dequeue(&queue)); // 出队元素:10
  
    printQueue(&queue); // 队列中的元素为:20 30
  
    return 0;
}

上記のコードでは、配列を使用してキューの要素を格納し、2 つのポインターを使用してそれぞれキューの先頭frontと末尾を指します。rearモジュロ演算により、循環キューの機能を実現することができる。

この関数ではmain、まず空のキューを初期化し、次にエンキューおよびデキュー操作を実行して、結果を出力します。

要約する

キューは、先入れ先出しの特性を持つ一般的に使用されるデータ構造です。実際の問題を解決する場合、キューは重要な役割を果たすことができます。C 言語の実装コードを通じて、キューの概念と基本的な動作をより深く理解できます。このチュートリアルがキューの理解に役立つことを願っています。

おすすめ

転載: blog.csdn.net/qq_43884946/article/details/131475899