一、队列的结构定义
#define MaxSize 200
#define ElemType int
typedef struct {
ElemType data[MaxSize];
int front, rear;
}SqQueue, *PSqQueue;
二、基本操作的实现
//队列初始化
PSqQueue Init_Queue() {
PSqQueue Q;
Q = (PSqQueue)malloc(sizeof(SqQueue));
if (Q) {
Q->front = 0;
Q->rear = 0;
printf("初始化成功n");
}
return Q;
}
//队列判空 若为空。返回1
int Empty_Queue(PSqQueue Q) {
if (Q && Q->front == Q->rear)
return 1;
return 0;
}
//入队
void In_Queue(PSqQueue Q, ElemType e) {
if (Q->rear + 1 == Q->front) {
printf("入队失败,队满n");
return;
}
Q->rear = (Q->rear + 1) % MaxSize;
Q->data[Q->rear] = e;
printf("入队%d成功n", e);
}
//出队,用e带回出队元素
void Out_Queue(PSqQueue Q, ElemType* e) {
if (Empty_Queue(Q)) {
printf("出队失败,队空n");
return;
}
Q->front = (Q->front + 1) % MaxSize;
*e = Q->data[Q->front];
printf("出队成功n");
}
//读队头元素
ElemType Front_Queue(PSqQueue Q) {
if (Empty_Queue(Q)) {
printf("读取失败,队空n");
return -1;
}
return Q->data[(Q->front + 1) % MaxSize];
}
//销毁队列
void Destroy_Queue(PSqQueue* Q) {
if (*Q)
free(*Q);
*Q = NULL;
}
//显示队列所有元素
void Show_Queue(PSqQueue Q) {
PSqQueue p = Q;
while ((p->rear + 1) % MaxSize != p->front + 1) {
printf("%dn", p->data[p->front + 1]);
p->front = (p->front + 1) % MaxSize;
}
}
三、测试代码
#include
#include
int main()
{
int option = 0;
ElemType x = 0; //入队元素及出队带回元素
PSqQueue Q;
Q = (PSqQueue)malloc(sizeof(SqQueue));
printf("****************************************n");
printf("**** 1.初始化 2.判空 ****n");
printf("**** 3.入队 4.出队 ****n");
printf("**** 5.读队头元素 6.显示所有元素 ****n");
printf("**** 7.销毁队列 0.退出 ****n");
printf("****************************************n");
do {
printf("请输入:");
scanf("%d", &option);
switch (option) {
case 1:
Q = Init_Queue();
break;
case 2:
if (Empty_Queue(Q))
printf("队空n");
else
printf("队不为空n");
break;
case 3:
printf("请输入入队元素:");
scanf("%d", &x);
In_Queue(Q, x);
break;
case 4:
if (!Empty_Queue(Q)) {
Out_Queue(Q, &x);
printf("出队元素为:%dn", x);
}
else
printf("队空,无法出队n");
break;
case 5:
if (Front_Queue(Q) != -1)
printf("队头元素为:%dn", Front_Queue(Q));
break;
case 6:
Show_Queue(Q);
break;
case 7:
Destroy_Queue(&Q);
printf("销毁成功n");
break;
case 0:
break;
default:
break;
}
} while (option);
return 0;
}
四、测试结果