//声明
#include <stdio.h>
#include <stdlib.h>
#define N 100
#define datatype char
typedef struct queue
{
datatype data[N];//保存数据的数组
int front;//数据开头
int rear;//数据结尾
}Q;
//初始化
void init(Q*myqueue);
//判断是否为空
int isempty(Q*myqueue);
//入队
void enQueue(Q*myqueue, datatype num);
//出队
datatype deQueue(Q*myqueue);
//显示队列元素
void showQ(Q*myqueue);
//获取队列开头第一个节点数据
datatype getQhead(Q*myqueue);
//定义
//初始化队列
void init(Q*myqueue)
{
myqueue->front = myqueue->rear = 0;//表示为空
}
//判断是否为空
int isempty(Q*myqueue)
{
if (myqueue->front==myqueue->rear)
{
return 0;//表示头尾重合 就为空
}
else
{
return 1;
}
}
//入队
void enQueue(Q*myqueue, datatype num)
{
//判断队列是否已经满
if (myqueue->rear==N)//最后一个元素移动到了队列的尾部 表示队列已满
{
printf("队列已满,插入数据失败");
return -1;
}
else
{
//myqueue->data[myqueue->front]//不是front
myqueue->data[myqueue->rear] = num;//赋值
myqueue->rear += 1;//前移增加一个
}
}
//出队
datatype deQueue(Q*myqueue)
{
if (myqueue->front==myqueue->rear)
{
printf("队列为空,无法获取队列中的数据\n");
return -1;
}
else
{
myqueue->front += 1;//队列前端前移
//return myqueue->data[myqueue->rear];
return myqueue->data[myqueue->front - 1];//返回弹出的数据
}
}
//显示队列元素
void showQ(Q*myqueue)
{
putchar('\n');
if (myqueue->front==myqueue->rear)
{
printf("队列为空,无法显示队列数据\n");
return -1;
}
else
{
for (int i = myqueue->front;i<myqueue->rear;i++)
{
//printf("%c<->%-3d ", myqueue->data[i], myqueue->data[i]);
printf("%c ", myqueue->data[i]);
}
}
}
//获取队列开头第一个节点数据
datatype getQhead(Q*myqueue)
{
if (myqueue->front==myqueue->rear)
{
printf("队列为空,无法获取队列开头数据\n");
return -1;
}
else
{
return myqueue->data[myqueue->front];
}
}
//测试
void main()
{
//创建一个结构体变量
Q myQ;
//初始化队列
init(&myQ);
printf("入队 插入数据:");
enQueue(&myQ, 'R');
showQ(&myQ);//显示状态
enQueue(&myQ, 'o');
showQ(&myQ);//显示状态
enQueue(&myQ, 'c');
showQ(&myQ);//显示状态
enQueue(&myQ, 'k');
showQ(&myQ);//显示状态
enQueue(&myQ, 'e');
showQ(&myQ);//显示状态
enQueue(&myQ, 't');
showQ(&myQ);//显示状态
printf("\n出队 显示数据:");
//出队 弹出数据
deQueue(&myQ);
showQ(&myQ);//显示状态
deQueue(&myQ);
showQ(&myQ);//显示状态
deQueue(&myQ);
showQ(&myQ);//显示状态
deQueue(&myQ);
showQ(&myQ);//显示状态
deQueue(&myQ);
showQ(&myQ);//显示状态
deQueue(&myQ);
showQ(&myQ);//显示状态
getchar();
}