スタックのC言語による実装
サンプルプログラム
ここでは、実際にC言語によるキューの実装を紹介します。まずは、以下のサンプルを実行してみてください。
queue-1:main.c#include <stdio.h> // 配列の最大の大きさ #define MAX_LENGTH 100 typedef struct{ // データを格納数る配列 int array[MAX_LENGTH]; // 最初の位置 int first; // 最後の位置 int last; }QUEUE; // スタックの初期化 void init(QUEUE*); // 値のエンキュー int enqueu(QUEUE*,int); // 値のデキュー int dequeue(QUEUE*,int*); void main(){ QUEUE q; int value; init(&q); // スタックを初期化 // 1,2,3の順で値をプッシュ enqueue(&q,1); enqueue(&q,2); enqueue(&q,3); // 値をポップ while(dequeue(&q,&value)){ printf("%d ",value); } printf("\n"); } // スタックの初期化 void init(QUEUE* pQueue) { int i; for(i = 0; i < MAX_LENGTH; i++){ pQueue->array[i] = 0; } // 最初と最後の位置を先頭に。 pQueue->first = 0; pQueue->last = 0; } // 値のプッシュ int enqueue(QUEUE* pQueue,int value) { // lastの次が、firstならば、失敗 if((pQueue->last + 1) % MAX_LENGTH == pQueue->first){ return 0; } pQueue->array[pQueue->last] = value; // キューに新しい値を入れる pQueue->last = (pQueue->last + 1) % MAX_LENGTH; // lastの更新 // データを格納しきれなかった return 1; } // 値のポップ int dequeue(QUEUE* pQueue,int* pValue) { // キューにデータが一つもないなら、失敗 if(pQueue->first == pQueue->last) { return 0; } *pValue = pQueue->array[pQueue->first]; // いちばん先頭のキューを返す準備 pQueue->first = (pQueue->first+1) % MAX_LENGTH; // キューの先頭を次に移動する return 1; }
1 2 3
このプログラムでは、データを1,2,3の順でenqueueしています。それをdequeueすると、1,2,3の、入力された順で出力されることがわかります。このキューのバッファは、リングバッファになっているため、データの容量さえ超えていなければ、何度でも使えるようになっています。