环形队列测试软件(基于下述代码可视化VC6.0)

main.c

#include <stdio.h>

#include "CirclesQueue.c"

#include "welcome.h"

int main(int argc, char *argv[])

{

         CirclesQueue Q;

         DataType x, a, len;

         int cmd,i, m, n;

         char yn;

         for (i = 0; i < strlen(welcome); i++)

         {

                   printf("%c", welcome[i]);

                   for (m = 0; m < 2000; m++)

                            for (n = 0; n < 2000; n++)

                            {

                                     ;

                            }

         }

         do

         {

                   printf("-----------循环队列演示-----------\n");

                   printf(" 1. 初始化\n");

                   printf(" 2. 入队\n");

                   printf(" 3. 出队\n");

                   printf(" 4. 队空?\n");

                   printf(" 5. 队满\n");

                   printf(" 6. 队列长度\n");

                   printf(" 7. 打印队首元素\n");

                   printf(" 8. 打印队列\n");

                   printf(" 9. 帮助\n");

                   printf(" 0. 退出\n");

                   printf(" 请选择(0~8):");

                   scanf("%d", &cmd);

                   switch (cmd)

                   {

                   case 1:

                            init(&Q);

                            printf("队列已初始化!\n");

                            break;

                   case 2:

                            printf("请输入要入队的元素x=");

                            scanf("%d", &x);

                            if (!enqueue(&Q, x))

                            {

                                     printf("元素x=%d已入队\n", x);

                            }

                            break;

                   case 3:

                            printf("确定要出队(出队会将删除对首元素, y or n, n)?");

                            fflush(stdin);

                            scanf("%c", &yn);

                            if (yn == 'y' || yn == 'Y')

                            {

                                     if (!dequeue(&Q, &x))

                                     {

                                               printf("队首元素【%d】已出队!\n", x);

                                     }

                            }

                            break;

                   case 4:

                            if (isempty(&Q) == 1)

                            {

                                     printf("队列为空!\n");

                            }

                            else

                            {

                                     printf("队列不是空的!\n");

                            }

                            break;

                   case 5:

                            if (isfull(&Q) == 1)

                            {

                                     printf("队列已满!\n");

                            }

                            else

                            {

                                     printf("队列未满!\n");

                            }

                            break;

                   case 6:

                            len = querylen(&Q);

                            printf("队列长度为【%d】\n", len);

                            break;

                   case 7:

                            a = printfront(&Q);

                            printf("队首元素为【%d】\n", a);

                            break;

                   case 8:

                            querylist(&Q);

                            break;

                   case 9:

                            printf("本程序为环形队列的演示程序,本程序演示了环形队列功能!\n");

                            break;

                   }

         } while (cmd != 0);

         return 0;

}

CirclesQueue.c

/*

         CirclesQueue.c

*/

#include <stdio.h>

#include "CirclesQueue.h"

/*循环队列初始化*/

int init(CirclesQueue *Q)

{

         Q->front = 0;

         Q->rear = 0;

         return 0;

}

/*入队*/

int enqueue(CirclesQueue *Q, DataType x)

{

         if (isfull(Q))

         {

                   printf("队列已满!100001\n");

                   return 100001;

         }

         Q->rear = (Q->rear + 1) % MAXSIZE;

         Q->data[Q->rear] = x;

         return 0;

}

/*队满?*/

int isfull(CirclesQueue *Q)

{

         return (Q->rear + 1) % MAXSIZE == Q->front ? 1 : 0;

}

/*出队*/

int dequeue(CirclesQueue *Q, DataType *x)

{

         if (isempty(Q))

         {

                   printf("队列为空!100002\n");

                   return 100002;

         }

         Q->front = (Q->front + 1) % MAXSIZE;

         *x = Q->data[Q->front];

         return 0;

}

/*队空*/

int isempty(CirclesQueue *Q)

{

         return (Q->front == Q->rear) ? 1 : 0;

}

/*队列长度*/

int querylen(CirclesQueue *Q)

{

         return (Q->rear - Q->front + MAXSIZE) % MAXSIZE;

}

/*打印队首元素*/

int printfront(CirclesQueue *Q)

{

         DataType a;

         if (isempty(Q))

         {

                   printf("队列为空!100002\n");

                   return 100002;

         }

         else

         {

                   return Q->data[Q->front + 1 % MAXSIZE];

         }

         return 0;

}

/*输出队列*/

void querylist(CirclesQueue *Q)

{

         int i;

         if (isempty(Q))

         {

                   /* code */

                   printf("队列为空\n");

                   return;

         }

         i = (Q->front) % MAXSIZE;

         printf("队列:");

         do

         {

                   printf("%d", Q->data[i + 1 % MAXSIZE]);

                   i = (i + 1) % MAXSIZE;

         } while (i != Q->rear);

         printf("\n");

}

CirclesQueue.h

/*

         CirclesQueue.h

         循环队列

*/

#include <stdio.h>

#define MAXSIZE 100

typedef int DataType;

typedef struct

{

         DataType data[MAXSIZE];

         int front;

         int rear;

}CirclesQueue;

/*循环队列初始化*/

int init(CirclesQueue *Q);

/*入队*/

int enqueue(CirclesQueue *Q, DataType x);

/*队满?*/

int isfull(CirclesQueue *Q);

/*出队*/

int dequeue(CirclesQueue *Q, DataType *);

/*队空*/

int isempty(CirclesQueue *Q);

/*队长*/

int querylen(CirclesQueue *Q);

/*打印队首元素*/

int printfront(CirclesQueue *Q);

/*输出队列*/

void querylist(CirclesQueue *Q);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值