栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

#include 
#include 
#include 
#define MaxSize 5

typedef struct {
  int data[MaxSize];//此处tag本应为bool类型的变量 初始化tag为0
  int front,rear;  // tag==0表明循环队列初始化完成或上一次操作为出队操作
  int tag;        //  tag==1表明循环队列上一次操作为入队操作

}SqQueue;

int InitQueue(SqQueue*Q){
   Q->front=Q->rear=Q->tag=0;
   printf("该循环队列初始化完成nn");
}

int isEmpty(SqQueue Q){
   if(Q.front==Q.rear&&Q.tag==0)
      return 1;
   else
    return 0;

}

int length(SqQueue Q){//此处由于队空和队满时皆有Q.rear==Q.front 所以需要加一项tag是否为1来判断是队满还是队空
    if(Q.front!=Q.rear)
     return((Q.rear-Q.front+MaxSize)%MaxSize);
    else if(isEmpty(Q))
            return 0;
          else
            return MaxSize;

}

int EnQueue(SqQueue *Q,int e){
    if(Q->front==Q->rear&&Q->tag==1){
        printf("该循环队列已满 本次入队操作非法nn");
        return 0;

    }
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%MaxSize;
    Q->tag=1;
    printf("本次入队元素:%dnn",e);
    return 1;



}

int DeQueue(SqQueue *Q,int *e){
    if(isEmpty(*Q)){
        printf("该循环队列为空 本次出队操作非法nn");
        return 0;

    }
    *e=Q->data[Q->front];
    Q->front=(Q->front+1)%MaxSize;
    Q->tag=0;
    printf("本次出队元素:%dnn",*e);
    return 0;

}

int GetHead(SqQueue Q){
    if(isEmpty(Q)){
        printf("该循环队列为空 本次查对头元素操作非法nn");
        return 0;
    }
    printf("循环队列当前对头元素为:%dnn",Q.data[Q.front]);
    return Q.data[Q.front];

}

int main(){
 SqQueue Q;
 int discard;
 InitQueue(&Q);
 DeQueue(&Q,&discard);
 if(isEmpty(Q))
        printf("当前该循环队列为空nn");
 else
        printf("当前该循环队列的长度为%dnn",length(Q));

 EnQueue(&Q,9);
 EnQueue(&Q,9);
 EnQueue(&Q,5);
 EnQueue(&Q,2);
 EnQueue(&Q,7);
 EnQueue(&Q,7);

 if(isEmpty(Q))
        printf("当前该循环队列为空nn");
    else
        printf("当前该循环队列的长度为%dnn",length(Q));
 DeQueue(&Q,&discard);

 if(isEmpty(Q))
        printf("当前该循环队列为空nn");
    else
        printf("当前该循环队列的长度为%dnn",length(Q));
 GetHead(Q);

 return 1;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号