データ構造--キューのC配列実装
キューは、テーブルの一方のセグメントにのみ挿入する、他方のセグメントにのみ取り出す操作を限定する線形テーブルである.
従って、先進的な先行データ構造(FIFO---First In First Out)とも呼ばれる.
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);
}
結果図:
転載は作者を明記してください:劉さん