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 言語の実装コードを通じて、キューの概念と基本的な動作をより深く理解できます。このチュートリアルがキューの理解に役立つことを願っています。