#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define MAXSIZE 10
//比队列实际大小多申请一个空间是为了保证指针循环公式的正确,
//避免头尾指针相遇时可能对空也可能对满 使对尾指针可以最大为MAXSIZE,多出来的空间不存值
typedef struct{
ElemType data[MAXSIZE+1]; //定义队列,长度比队列实际大小多一个空间
int front; //定义队头
int rear; //定义对尾指针
int count; //队列中元素个数
}Queue;
//初始化队列
void initQueue(Queue *q){
q->front=0;
q->rear=0;
q->count=0;
}
//判断对空 头指针和尾指针相遇
int isEmpty(Queue *q){
if(q->front==q->rear){
return 1;
}
return 0;
}
//判断对满 对尾指针对 队列最大空间求余 和对头一样,公式是为了保证余数为正
int isFull(Queue *q){
if((q->rear+1)%(MAXSIZE+1)==q->front){
return 1;
}
return 0;
}
//入队 对不满 入队 尾指针后移 数量加一
void InQueue(Queue *q,ElemType ele){
if(!isFull(q)){
q->data[q->rear] = ele;
q->rear = (q->rear+1)%(MAXSIZE+1);
q->count++;
}
else{
printf("队列已满\n");
}
}
//出对 对不为空 出对,头指针后移 数量减一
ElemType outQueue(Queue *q){
if(!isEmpty(q)){
ElemType res = q->data[q->front];
q->front = (q->front+1)%(MAXSIZE+1);
q->count--;
return res;
}
return -1;
}
//查询元素个数
int getCount(Queue q){
return q.count;
}
int main(){
Queue *q;
int i;
initQueue(q);
printf("1为空%d\n",isEmpty(q));
for(i=0;i<10;i++){
InQueue(q,i);
}
printf("1为满%d\n",isFull(q));
for(i=0;i<5;i++){
printf("%d ",outQueue(q));
}
printf("\n");
printf("1为满%d\n",isFull(q));
InQueue(q,11);
for(i=0;i<6;i++){
printf("%d ",outQueue(q));
}
printf("\n");
printf("队列个数:%d\n",getCount(*q));
}
网友评论