#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#define MAXSIZE 11
/**
* 实现循环队列的逆转
*/
typedef struct{
int data[MAXSIZE];
int front ,rear;
}CQueue;
//初始化队列
CQueue *InitQ() {
CQueue *q=(CQueue *)malloc(sizeof(CQueue));
if(!q) exit(0);
q->front=q->rear=0;
return q;
}
//入队
int enQueue(CQueue *q,int num) {
//判断是否队满
if((q->rear+1)%MAXSIZE==q->front){
printf("队满!\n");
return 0;
}
q->data[q->rear]=num;
q->rear=(q->rear+1)%MAXSIZE;
return 1;
}
//出队
int deQueue(CQueue *q,int *num) {
if(q->rear==q->front){
printf("队空!\n");
return 0;
}
*num=q->data[q->front];
q->front=(q->front+1)%MAXSIZE;
//如果是循环单链表结构的队列, 需要考虑出队的是否是最后一个元素
return 1;
}
//队长
int qLength(CQueue *q){
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
//队列逆置:
int convertQ(CQueue *q) {
int a[MAXSIZE];
int i=0,j,num,tag=1;
//队中所有元素出队,存入数组a[]中
while(tag){
tag=deQueue(q,&num);
if(tag){
a[i]=num;
i++;
}
}
for(j=i-1;j>=0;j--){
//入队
enQueue(q,a[j]);
}
return 1;
}
void print(CQueue *q){
int len=qLength(q);
for(int i=0;i<len;i++){
printf("%4d",q->data[(q->front+i)%MAXSIZE]);
}
printf("\n");
}
int main(){
CQueue *q;
q=InitQ();
int tag=1;
int num;
while(tag){
scanf("%d",&num);
tag=enQueue(q,num);
}
print(q);
convertQ(q);
print(q);
}
循环队列逆置
最新推荐文章于 2023-01-18 22:07:04 发布