#ifndef __QUEUE_H__
#define __QUEUE_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define MAX 4
typedef int DataType;
typedef struct Queue
{
DataType data[MAX];
int front;
int rear;
}Queue, *pQueue;
void ClearQueue(pQueue Q);
int QueueLength(pQueue Q);
int GetHead(pQueue Q, DataType *x); //访问队头元素
void EnQueue(pQueue Q, DataType x); //向队列中插入一个元素
int DeQueue(pQueue Q, DataType *x); //删除队列中的一个元素
#endif //__QUEUE_H_
#include"queue.h"
void ClearQueue(pQueue Q)
{
assert(Q);
memset(Q->data, 0, sizeof(DataType)*MAX);
Q->front = 0;
Q->rear = 0;
}
int QueueLength(pQueue Q)
{
assert(Q);
return (Q->rear - Q->front + MAX)%MAX; //求循环队列的长度
}
int GetHead(pQueue Q, DataType *x)
{
assert(Q);
if (((Q->rear - Q->front + MAX) % MAX) == 0) //异常情况,队列为空
{
printf("队列为空\n");
return 0;
}
else
{
*x = Q->data[Q->front]; //保存队头元素
return 1;
}
}
void EnQueue(pQueue Q, DataType x)
{
assert(Q);
if (((Q->rear + 1) % MAX) == Q->front) //异常情况,队列已满
{
printf("队列已满\n");
}
else
{
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAX; //插入之后队尾指针要加1
}
}
int DeQueue(pQueue Q, DataType *x)
{
assert(Q);
if ((Q->rear-Q->front+MAX)%MAX==0) //异常情况,队列已空
{
printf("队列已空\n");
return 0;
}
else
{
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAX; //队头要加一
return 1;
}
}
#include"queue.h"
void meau()
{
printf("*********************************\n");
printf("0.exit 1.ClearQueue \n");
printf("2.QueueLength 3.GetHead \n");
printf("4.EnQueue 5.DeQueue \n");
printf("请选择:> ");
}
void test()
{
Queue Q;
Q.front = 0;
Q.rear = 0;
int n = 0;
int x = 0;
int ret = 0;
while (1)
{
meau();
scanf("%d", &n);
switch (n)
{
case 0:
exit(1);
break;
case 1:
ClearQueue(&Q);
break;
case 2:
ret = QueueLength(&Q);
printf("%d\n", ret);
break;
case 3:
ret=GetHead(&Q, &x);
if (ret!=0)
{
printf("%d\n", x);
}
break;
case 4:
printf("请输入:");
scanf("%d", &x);
EnQueue(&Q, x);
break;
case 5:
ret=DeQueue(&Q, &x);
if (ret!=0)
{
printf("%d\n", x);
}
break;
default:
printf("选择无效\n");
break;
}
}
}
int main()
{
test();
system("system");
return 0;
}
Queue的基本算法
最新推荐文章于 2021-12-24 15:03:47 发布