Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で線形データ構造キューを説明する


データ構造は、構造化された方法で編成されたデータのコレクションです。以下に説明するように、2つのタイプに分けられます-

  • 線形データ構造 −データは直線的に編成されます。たとえば、配列、構造、スタック、キュー、リンクリスト。

  • 非線形データ構造 −データは階層的に編成されています。たとえば、ツリー、グラフ、セット、テーブル。

キュー

これは線形データ構造であり、挿入は後端で行われ、削除は前端で行われます。

C言語で線形データ構造キューを説明する

キューの順序はFIFO–先入れ先出し

です。

操作

  • 挿入–要素をキューに挿入します。
  • 削除–キューから要素を削除します。

条件

  • キューオーバーフロー-要素を完全なキューに挿入しようとしています。

  • フロー中のキュー-空のキューから要素を削除しようとしています。

アルゴリズム

以下に挿入のアルゴリズムを示します()-

  • キューのオーバーフローを確認します。
if (r==n)
printf ("Queue overflow")
  • それ以外の場合は、要素をキューに挿入します。
q[r] = item
r++

以下に示すのは、削除()のアルゴリズムです。 −

  • フロー中のキューを確認します。
if (f==r)
printf ("Queue under flow")
  • それ以外の場合は、キューから要素を削除します。
item = q[f]
f++

以下に示すのは、表示()のアルゴリズムです。 −

  • キューが空かどうかを確認します。
if (f==r)
printf("Queue is empty")
  • それ以外の場合は、「f」から「r」までのすべての要素を印刷します。
for(i=f; i<r; i++)
printf ("%d", q[i]);

プログラム

以下は、配列を使用してキューを実装するためのCプログラムです-

#include<limits.h>
#include<stdio.h>
#include <stdlib.h>
struct Queue {
   int front, rear, size;
   unsigned capacity;
   int* array;
};
struct Queue* createQueue(unsigned capacity){
   struct Queue* queue = (struct Queue*)malloc(
   sizeof(struct Queue));
   queue->capacity = capacity;
   queue->front = queue->size = 0;
   queue->rear = capacity - 1;
   queue->array = (int*)malloc(
   queue->capacity * sizeof(int));
   return queue;
}
//if queue is full
int isFull(struct Queue* queue){
   return (queue->size == queue->capacity);
}
// Queue is empty
int isEmpty(struct Queue* queue){
   return (queue->size == 0);
}
void Equeue(struct Queue* queue, int item){
   if (isFull(queue))
      return;
   queue->rear = (queue->rear + 1)
   % queue->capacity;
   queue->array[queue->rear] = item;
   queue->size = queue->size + 1;
   printf("%d entered into queue\n", item);
}
int Dqueue(struct Queue* queue){
   if (isEmpty(queue))
      return INT_MIN;
   int item = queue->array[queue->front];
   queue->front = (queue->front + 1)
   % queue->capacity;
   queue->size = queue->size - 1;
   return item;
}
// Function to get front of queue
int front(struct Queue* queue){
   if (isEmpty(queue))
      return INT_MIN;
      return queue->array[queue->front];
   }
   // Function to get rear of queue
   int rear(struct Queue* queue){
      if (isEmpty(queue))
         return INT_MIN;
   return queue->array[queue->rear];
}
int main(){
   struct Queue* queue = createQueue(1000);
   Equeue(queue, 100);
   Equeue(queue, 200);
   Equeue(queue, 300);
   Equeue(queue, 400);
   printf("%d is deleted element from queue\n\n",
   Dqueue(queue));
   printf("1st item in queue is %d\n", front(queue));
   printf("last item in queue %d\n", rear(queue));
   return 0;
}

出力

上記のプログラムを実行すると、次の結果が得られます-

100 entered into queue
200 entered into queue
300 entered into queue
400 entered into queue
100 is deleted element from queue
1st item in queue is 200
last item in queue 400

  1. トップダウン設計と機能の構造図をC言語で説明する

    関数は、明確に定義された特定のタスクを実行する自己完結型のブロックです。 利点 C言語の関数には次のものが含まれます- 再利用性。 プログラムの長さを短くすることができます。 障害のある機能を簡単に見つけて見つけることができます。 トップダウンのモジュラープログラミングを容易にします。 トップダウンの設計および構造図 これは、複雑な問題をサブ問題に分割して解決する問題解決方法です。 構造図は、問題のサブ問題間の関係を示すドキュメントツールです。 問題を関連するサブ問題に分割することは、アルゴリズムを改良するプロセスです。たとえば、2つの数値に対して算術演算を実行すると、次のよ

  2. ハーフエッジデータ構造

    はじめに テンプレートパラメータまたはハーフエッジデータ構造(HalfedgeDSと略記)のHDSは、平面マップ、多面体、またはその他の方向付け可能な2次元など、頂点、エッジ、および面の入射情報を維持できるエッジ中心のデータ構造として定義されます。ランダムな次元に埋め込まれたサーフェス。各エッジは、反対方向の2つのハーフエッジに分割されます。各ハーフエッジには、1つの入射面と1つの入射頂点が格納されます。各面と各頂点に1つの入射ハーフエッジが格納されます。ハーフエッジデータ構造のバリエーションを減らすと、面のハーフエッジポインタや面の保存など、この情報の一部を削除できます。 ハーフエッジデ