スタックの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の、入力された順で出力されることがわかります。このキューのバッファは、リングバッファになっているため、データの容量さえ超えていなければ、何度でも使えるようになっています。






