#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct Queue{
int data[MAXSIZE];
int front;
int rear;
}Queue;
void initQueue(Queue *q,int n);
void showQueue(Queue *q);
int getLength(Queue *q);
int inQueue(Queue *q,int num);
int outQueue(Queue *q,int *tar);
//队列初始化
void initQueue(Queue *q,int n){
q->front = 0;
q->rear = 0;
for(int i = 0;i<n;i++){
q->data[q->rear] = 2*i+1;
printf("++++++++++++++++++++++++%d\n",q->data[q->rear]);
q->rear++;
printf("-------------------------%d\n",q->rear);
}
}
//队列的输出
void showQueue(Queue *q){
int len = getLength(q);
printf("front---");
for(int i = 0;i<len;i++){
//printf("%d\n",q->front);
//判断是否小于整个队列的总长队。然后输入这个队列
if(q->front+i<MAXSIZE)
printf("%d ---q->data[q->front+i]\n",q->data[q->front+i]);
else
printf("%d +++q->data[q->front+i-MAXSIZE]\n",q->data[q->front+i-MAXSIZE]);
}
}
//获取整个队列的长度
int getLength(Queue *q){
//printf("%d getLenngth",q->rear-q->front+MAXSIZE);
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
//入队操作,num为插入的数
int inQueue(Queue *q,int num){
//判断队列是否为满
if((q->rear+1)%MAXSIZE==q->front)
return 0;
q->data[q->rear] = num;
q->rear = (q->rear+1)%MAXSIZE;
return 1;
}
//出队操作
int outQueue(Queue *q,int *tar){
if(q->front == q->rear)
return 0;
*tar = q->data[q->front];
q->front = (q->front+1)%MAXSIZE;
return 1;
}
int main(){
Queue *q = (Queue *)malloc(sizeof(Queue));
initQueue(q,6);
int *tar = (int *)malloc(sizeof(int));
showQueue(q);
printf("+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+");
if(inQueue(q,110))
showQueue(q);
printf("+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+");
if(outQueue(q,tar))
printf("the number %d out Queue\n",*tar);
showQueue(q);
if(outQueue(q,tar))
printf("the number %d out Queue\n",*tar);
showQueue(q);
}