データ構造--キューのC配列実装


キューは、テーブルの一方のセグメントにのみ挿入する、他方のセグメントにのみ取り出す操作を限定する線形テーブルである.
従って、先進的な先行データ構造(FIFO---First In First Out)とも呼ばれる.
Cコードは以下の通り(小さなバグがあって調整したくないので、参考にすればいい):
#include<stdio.h>
#define maxsize 5

typedef int ElemType;

typedef struct queue
{
    int head;
    int tail;
    ElemType Data[maxsize];
}Queue;

void InitQueue(Queue *Q)
{
    Q->tail=0;
    Q->head=0;
}

void EnQueue(Queue *Q)
{
    int value;
    int i;
    printf("Input Queue Value:
"); scanf("%d",&value); Q->head++; int len=Q->head-Q->tail; if(len<maxsize) { for(i=len-1;i>=0;i--) Q->Data[i+1]=Q->Data[i]; } Q->Data[Q->tail]=value; printf("
"); } void DeQueue(Queue *Q) { int len=Q->head-Q->tail-1; Q->head=Q->head-1; if(len<=maxsize) { printf("Out put Value:
"); printf("%d ",Q->Data[len]); } printf("
"); } void IsEmpty(Queue *Q) { if(Q->head==0&&Q->tail==0) printf("Queue is empty.
"); else printf("Queue is not empet.
"); printf("
"); } void IsFull(Queue *Q) { if(Q->head-Q->tail>=maxsize) printf("Queue is Full.
"); else printf("Queue is not Full.
"); printf("
"); } void main() { Queue Q; InitQueue(&Q); EnQueue(&Q); EnQueue(&Q); EnQueue(&Q); EnQueue(&Q); EnQueue(&Q); IsEmpty(&Q); IsFull(&Q); DeQueue(&Q); DeQueue(&Q); DeQueue(&Q); DeQueue(&Q); DeQueue(&Q); IsEmpty(&Q); IsFull(&Q); }

結果図:
転載は作者を明記してください:劉さん