<数据结构> rear指针指向队尾元素下一位置&&设置一个标志变量size 的循环队列实现(C语言)(第2种/共6种)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MaxSize 5

typedef struct {

int data[MaxSize];
int front,rear;
int size; //此处引入一个新的标志变量使循环队列在队满和队空时消除歧义
}SqQueue;

int InitQueue(SqQueue *Q){
Q->front=Q->rear=Q->size=0;
printf(“该顺序表已完成初始化\n\n”);//此时front指向队列中对头元素 rear指向队列中队尾元素下一元素
return 1; //该循环队列的最大容量为MaxSize 每次入队EnQueue()时size值++ 每次出队DeQueue()时size值–
//此时队满和队空时都有 Q->frontQ->rear
//此时判空条件:Q->size
0 判满条件:Q->size==MaxSize
}

int isEmpty(SqQueue Q){
if(Q.frontQ.front&&Q.size0)
return 1;
else
return 0;

}

int length(SqQueue Q){//采取size标志变量记录循环队列长度
return Q.size;
}

int EnQueue(SqQueue *Q,int e){
if(Q->sizeMaxSize&&Q->frontQ->rear)
return 0;
Q->data[Q->rear]=e;
Q->rear=(Q->rear+1)%MaxSize;
Q->size++;
printf(“本次入队元素为:%d\n\n”,e);
return 1;

}

int DeQueue(SqQueue *Q,int *e){
if(isEmpty(*Q)){
printf(“该循环队列此时为空 出队操作非法\n\n”);
return 0;
}
(*e)=Q->data[Q->front];
Q->front=(Q->front+1)%MaxSize;
Q->size–;
printf(“本次出队元素为:%d\n\n”,*e);
return 1;

}

int GetHead(SqQueue Q){
if(Q.frontQ.size&&Q.size0){
printf(“该循环队列此时为空 获取对头元素操作非法\n\n”);
return 0;}
return (Q.data[Q.front]);
}
int main(){
SqQueue Q;
int discard;
InitQueue(&Q);

if(isEmpty(Q))
printf(“当前该循环队列为空\n\n”);
else
printf(“当前该循环队列的长度为%d\n\n”,length(Q));

EnQueue(&Q,7);
EnQueue(&Q,2);
EnQueue(&Q,5);
EnQueue(&Q,9);
EnQueue(&Q,9);
if(isEmpty(Q))
printf(“当前该循环队列为空\n\n”);
else
printf(“当前该循环队列的长度为%d\n\n”,length(Q));
DeQueue(&Q,&discard);

if(isEmpty(Q))
printf(“当前该循环队列为空\n\n”);
else
printf(“当前该循环队列的长度为%d\n\n”,length(Q));

printf(“此时对头元素为:%d\n\n”,GetHead(Q));

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴巴_羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值