Top授業関係プログラミング言語2 → キューとスタック
[前のページ] [目次] [次のページ]


vi. キューとスタック


v.1 キューとスタックとは

データの保存と取り扱いの方法です。

キューもスタックも、データを一列に並べます。 また、データの追加と取り出し方法に特徴があります。


v.1 キューを実現するプログラム

キューを実現する簡易なプログラムを、以下に示します。

#include<stdio.h>

#define N 1000

struct queue{
        char data[N];
        int head;
        int tail;
};

void initialize(struct queue *q){
        int i;

        q->head=0;
        q->tail=0;
        for(i=0; i < N; ++i){
                q->data[i]=' ';
        }
}

void enqueue(struct queue *q, int item){
        if (q->tail >= N) {
                printf("This queue is full! \n");
        }else{
                q->data[q->tail]=item;
                q->tail++;
        }
}

int dequeue(struct queue *q){
        int tmp;

        if(q->head == q->tail){
                return -1;
        }else{
                tmp=q->data[q->head];
                q->head++;
                return tmp;
        }
}

int main() {
        char symbol;
        int i, item;
        struct queue Q;

        initialize(&Q);
        do{
                printf("input ! or @:\n");
                scanf(" %c",&symbol);
                if ( symbol == '!'){
                        item = dequeue(&Q);
                        printf("dequeue %d \n",item);
                }else if( symbol == '@'){
                        printf("input an integer:\n");
                        scanf("%d",&item);
                        enqueue(&Q, item);
                        printf("enqueue %d \n",item);
                }

                printf("\n--------------- Now queue data:\n");
                for (i=Q.head; i < Q.tail; i++){
                        printf("  data[%d]=%d\n", i, Q.data[i]);
                }
                printf("---------------\n\n");
        }while (symbol != EOF );
}

このプログラムは

ということを行います。

どんなにデータを取り出そうとも、 累計で1000個までしかデータを蓄えることができないので、 あまり良いプログラムではありません。

構造体として

struct queue{
    int data[N];
    int head;
    int tail;
}; 

を定義しています。それぞれのメンバは、

を保存します。概略図は、次のようになります。

キューの例

また、関数として、initialize、enqueue、dequeue を使用しています。


目次に戻る
授業関係のページに戻る