Java教程

循环队列:给出rear和quelen(队中元素个数),不给出front,实现入队出队操作(摆烂组第二弹)

本文主要是介绍循环队列:给出rear和quelen(队中元素个数),不给出front,实现入队出队操作(摆烂组第二弹),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

非计算机专业软基作业,仅代表个人拙见

欢迎评论区友好讨论

欢迎各位大佬指点,本人fw,求轻喷

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
static int quelen=0;//全局变量 
typedef char ElemType;
typedef struct
{ ElemType data[MAXSIZE];
int rear;
int s;
}Circularqueue;
void InitQueue(Circularqueue *q)//构造空队列 
{q->rear =MAXSIZE;
quelen=1;
q->s =0;
printf("我初始化成功了s=%d,quelen=%d,rear=%d\n ",q->s,quelen,q->rear);
}
int QueueEmpty(Circularqueue *q)//判断队列空 
{if((((q->rear)-quelen+1)==q->rear )&&q->s ==0)
return (1);
else 
return (0);
}
void InsertQueue(Circularqueue *q,ElemType x)//入队 
{if((((q->rear)-quelen+1)==q->rear )&&q->s ==1)
{printf("\n 队满,上溢!");
exit(1); }
quelen++;//调试2 
q->rear =(q->rear +1);
if(q->rear==MAXSIZE+1)q->rear=1;
q->data [q->rear -1]=x;
printf("队内有元素<quelen-1>%d个,新加入的是%d,rear指针在%d,存在了rear-1在%d\n",quelen-1,x,q->rear,q->rear-1);
q->s =1;
}
ElemType DeleteQueue(Circularqueue *q)//出队 
{ElemType x;
if(QueueEmpty(q))
{printf("\n 队空,下溢!");
exit(1); 
}
quelen--;
if(((q->rear)-quelen+1)==MAXSIZE+1) quelen=MAXSIZE-(q->rear);
x=q->data [((q->rear)-quelen+1)-1];
if(quelen==1 ) q->s =0;
return x;
}
ElemType GedHead(Circularqueue *q)//读取队头元素 
{ElemType x;
if(QueueEmpty(q))
{printf("\n 队空,下溢!");
exit(1); 
}
//printf("我现在输出的是第%d块数组",(-1*((q->rear)-quelen+1)%MAXSIZE));
x=q->data [-1*(((q->rear)-quelen+1)%MAXSIZE)];
return x;
}
int main ()
{int i;
Circularqueue myqueue,*q;
q=&myqueue;
InitQueue(q);//调试成功 
for(i=0;i<=99;i++)
InsertQueue(q,i);//调试成功 
for(i=0;i<=99;i++)
{printf("出队元素是%d\n",DeleteQueue(q));//GedHead有问题(已修复)
}
return 0;
}

 

 

 

后面的结果懒得截图了

 quelen的修改方法

出队的修改方法

 

 

这篇关于循环队列:给出rear和quelen(队中元素个数),不给出front,实现入队出队操作(摆烂组第二弹)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!