C语言编写循环队列出现编译错误?

#include <stdio.h>#include <stdlib.h>#define maxsize 100typedef sturct{ int data[maxsize]; int front,rear;}SqQueue;void initQueue(SqQueue *qu){ qu->front=0; qu->reat=0;}int enQueue (SqQueue *qu,int x){ if ((qu->rear+1)%maxsize==qu->front) return 0; qu->rear=(qu->rear+1)%maxsize; qu->data[qu->rear]=x; return 1;}int deQueue(SqQueue *qu,int x){ if(qu->front==qu->rear) return 0; qu->front=(qu->front+1)%maxsize; x=qu->data[qu->front]; return 1;}int main(){ SqQueue qu; int a,n,e,b; printf("请输入入队元素个数\n"); scanf ("%d",&n); printf ("\n请输入入队元素\n"); while (n--) { scanf ("%d",&a); enQueue (&qu,a); } for(a=0;a<n-1;a++) printf ("%d",qu->data[a]); printf ("\n请输入入队元素e"); scanf ("%d",&e); enQueue (&qu,e); for(a=0;a<n;a++) printf ("%d",qu->data[a]); printf ("\n"); b=qu->data[qu->front]; deQueue(&qu,b); for(a=0;a<n-1;a++) printf ("%d",qu->data[a]); printf ("\n"); return 0;}希望帮忙看一下这是哪里错误了,谢谢。

你的逻辑我没有细看,这是我找出的语法上的错误,修改的地方用注释标出来了

#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
/////你的struct写错了
typedef struct

 int data[maxsize]; 
 int front,rear;
}SqQueue;
void initQueue(SqQueue *qu)

 qu->front=0; 
////你的↓写错了
 qu->rear=0;
}
int enQueue(SqQueue *qu,int x)

 if ((qu->rear+1)%maxsize==qu->front) return 0; 
 qu->rear=(qu->rear+1)%maxsize; 
 qu->data[qu->rear]=x; 
 return 1;
}
int deQueue(SqQueue *qu,int x)
{
 if(qu->front==qu->rear) return 0; 
 qu->front=(qu->front+1)%maxsize; 
 x=qu->data[qu->front]; 
 return 1;
}
int main(){
 SqQueue qu;
 int a,n,e,b; 
 printf("请输入入队元素个数\n"); 
 scanf("%d",&n); 
 printf("\n请输入入队元素个数\n"); 
 while(n--)
 { 
  scanf("%d",&a); 
  enQueue(&qu,a); 
 }
                               //箭头改成点
 for(a=0;a<n-1;a++) printf( "%d",qu.data[a]); 
 printf("\n请输入入队元素e"); 
 scanf("%d",&e); 
 enQueue(&qu,e);
                           //箭头改成点
 for(a=0;a<n;a++) printf("%d",qu.data[a]); 
 printf ("\n"); 
         //箭头改成点
 b=qu.data[qu.front]; 
 deQueue(&qu,b);
                             //箭头改成点
 for(a=0;a<n-1;a++) printf("%d",qu.data[a]); 
 printf("\n"); 
 return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-11-04
只想告诉你一些学c语言的方法和小调试技巧:
1、编程一定要从简单的开始,多看简单例程,记住编程思路。。只有简单的基础好了,复杂的就没有那么难了。
2、对于输入数据等看不见的地方,要用打印函数,把看不见的打印出来,这样才可看出哪里有问题。
下面把程序中的一些错误改了一点,通过编译,剩下其他错误和不对的,根据例句自己琢磨改正。。学习就是在出错误和改错中,才能真正学好。。加油。
#include <stdio.h>
#include <stdlib.h>
#define maxsize 100

typedef struct //源程序粗心把结构图字母写错了
{
int data[maxsize];
int front;
int rear;
}SqQueue;

void initQueue(SqQueue *qu)
{
qu->front=0;
qu->rear=0; //怎么能把rear写成reat?
}
int enQueue (SqQueue *qu,int x,int y)
{
/* if ((qu->rear+1)%maxsize==qu->front) //思路混乱。。编程首先要想好思路,并且后面用文字写出来,不然自己都会忘记和乱。
return 0;
qu->rear=(qu->rear+1)%maxsize;
qu->data[qu->rear]=x;
return 1;
*/

qu->data[y]=x; //直接进入数组内就可以了
return 1;
}
int deQueue(SqQueue *qu,int x)
{
if(qu->front==qu->rear)
return 0;
qu->front=(qu->front+1)%maxsize;
x=qu->data[qu->front];
return 1;
}

int main()
{
int a,n,e,b,j;
SqQueue *qu;
SqQueue qu1; //要定义一个实际结构体,否则没有分配内存无法应用
qu=&qu1; //指针必须先定义指向才能用,这些基本知识要记住。注释掉这句试试看
printf("请输入入队元素个数\n");
scanf ("%d",&n);

printf ("入队元素个数=%d\n",n);
j=n; //用j变量不会破坏输入个数n
while (j--)
{
printf("请输入入队元素\n");
scanf ("%d",&a);
printf ("入队元素%d=%d\n",j+1,a);
enQueue (qu,a,j);
}
printf ("\n""入队元素=\n");
for(a=0;a<n;a++) //如果不用j变量,输入n--到现在是0,这部分就无法运行了
{
printf ("%d",qu->data[a]);
printf (",");
}
printf ("\n请输入入队元素e");
scanf ("%d",&e);
enQueue (qu,e,j);
for(a=0;a<n;a++)
printf ("%d",qu->data[a]); printf ("\n");
b=qu->data[qu->front];
deQueue(qu,b);
for(a=0;a<n-1;a++)
printf ("%d",qu->data[a]);
printf ("\n");
return 0;
}本回答被提问者和网友采纳

c语言循环队列的错误修改
\/\/fflush(stdin);\/\/用下面几句代码,替换fflush int c;if(feof(stdin) || ferror(stdin)){ break;}

c语言循环队列有点小问题,为什么这个输出的结果总比输入的少一个,,求...
getchar(); \/\/加一条语句,吃掉换行符就ok了

C语言循环队列问题求教
这个并没有错,可以根据图分开来算 front指针指向存储元素位置,rear指针指向第一个未存储元素位置 首先,队列上半部分,有元素,m-30+1;其次,队列下半部分,有元素,10-1;所以,总共的元素个数为total = m-30+1+10-1 = m-20

C语言用数组实现循环队列的入队出队
\/\/定义一个int型数组que,长度为N(常量切大于2).int que[N];int rear=0,front=0; \/\/队尾 队头判断队列已满:if((front+1)%N==rear%N) \/\/成立则队列已满判断队列为空 if((rear==front)) \/\/成立则队列空入队(一般在入队前判断队列是否已满)\/\/将val入队que[front++]=val;front%=N...

c语言关于双向循环队列的问题
你要删除p的前驱节点,那就是要删除p->prior这个节点。找其前端和后端。p->prior的前端:p->prior->prior。p->prior的后端:p。那么删除p->prior:就是 p->prior=p->prior->prior;(后端p的前指针直接指向其前端)。(p->prior已指向前端,这里直接写p->prior)p->prior->rear=p; (前端p-...

c语言循环队列
s=1表示循环队列中的成员个数为1,front=rear说明队列的头指针和尾指针都指向同一个队列成员,也就是说这个\/队列已经封闭了(首尾已经相接),那么这个队列也就满了 >>front=rear=m其中的m也不晓得是什么了 这个m就是具体的成员的地址了,front=rear=m,m就成了当前循环队列中唯一的成员 ...

C语言计算机二级考试循环队列元素个数怎么算
循环队列 Q[0:m]是 首先 队列一开始是 front = rear = m,所有队列都是x,表示无效数据。【1】【2】【3】【4】...【m-1】【m】【x】【x】【x】【x】...【x 】【 x 】如果插入一个数据 【a】表示有效数据 那么 front = 1, rear = m 【1】【2】【3】【4】...【m-1】...

数据结构顺序循环队列中取模(求余)问题,C语言
因为是循环队列 所以 完全有可能出现 队头在队尾后面的情况,即R<F 比如 一共10个元素 M=10 先入队9个元素,队头指向最后一个 即9 然后 出队5个元素,队尾指向5 再入队三个元素, 队头指向2 这是队内实际个数为(2-5+10)%10 = 7个 至于为什么要加上 是因为 当F=9 R=5的时候 (9...

C语言中循环队列的队满和队空的判断条件各是什么?有什么不同?
队满 是队列 只有一个空格的时候,插入指针 +1 =出队指针 对空,出队指针=插入指针

C语言中循环队列的队满和队空的判断条件各是什么?有什么不同?
队空时: Q.front == Q.rear;队满时: Q.front == (Q.rear + 1) % MAXSIZE;front指向队首元素,rear指向队尾元素的下一个元素。maxsize是队列长度。

相似回答