非计算机专业软基作业,仅代表个人拙见
欢迎评论区友好讨论
欢迎各位大佬指点,本人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的修改方法
出队的修改方法