【データ構造】静的ループキューの動作
2697 ワード
静的ループ・キューの操作の詳細は、次のコードを参照してください.
#include
#define MAX_SIZE 100
typedef struct
{
int front;
int rear;
int data[MAX_SIZE];
}Queue;
//
void initQueue(Queue * sq);
void DestoryQueue (Queue * sq); //
void EnQueue (Queue * sq,int e); //
void DeQueue (Queue * sq); //
void GetHead (Queue * sq); //
bool QueueEmpty (Queue sq); //
void DisQueue(Queue * sq); //
void main ()
{
int size = 0;
char choice = '\0';
Queue sQueue = {0,};
initQueue(&sQueue);
while (choice != 'q')
{
printf("******************************
");
printf("--- 1 ---
");
printf("--- 2 ---
");
printf("--- 3 ---
");
printf("--- 4 ---
");
printf("--- 5 ---
");
printf("--- 6 ---
");
printf("--- q ---
");
printf("******************************
");
scanf("
%c",&choice);
switch (choice)
{
case '1':
printf(" :");
scanf("%d",&size);
for (int i = 0; i < size; i++)
EnQueue (&sQueue, i+1) ; //
break;
case '2':
DeQueue(&sQueue);
break;
case '3':
DisQueue(&sQueue);
break;
case '4':
if (!QueueEmpty(sQueue))
printf("
");
break;
case '5':
GetHead(&sQueue);
break;
case '6':
DestoryQueue(&sQueue);
break;
case 'q':
return;
}
}
}
/* */
void initQueue(Queue * sq)
{
sq->front = 0;
sq->rear = 0;
for (int i = 0; i < MAX_SIZE; i++)
sq->data[i] = 0;
}
void DestoryQueue (Queue * sq) //
{
initQueue(sq);
return;
}
void EnQueue (Queue * sq,int e) //
{
if ((sq->rear+1)% MAX_SIZE != sq->front) //
{
sq->data[sq->rear] = e;
sq->rear = (sq->rear+1)%MAX_SIZE; //
}
}
void DeQueue (Queue * sq) //
{
if (!QueueEmpty(*sq)) //
sq->front = (sq->front+1)%MAX_SIZE;
else
return;
}
void GetHead (Queue * sq) //
{
if (!QueueEmpty(*sq))
printf(" %d
",sq->data[sq->front]);
}
bool QueueEmpty (Queue sq) //
{
if (sq.front != sq.rear)
return false;
else
{
printf(" ,
");
return true;
}
}
void DisQueue(Queue * sq) //
{
if (QueueEmpty(*sq))
return;
printf("
");
for (int i = sq->front; i < sq->rear; i++)
{
printf("%d\t",sq->data[i]);
}
printf("
");
}