
已解决问题
谷歌adity**ulkarni用户在2013.11.02提交了关于“秦岭c语言循环队列的错误修改”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-07-28T14:35:26。#include<stdio.h>#include<stdlib.h>
#include<malloc.h>
#definemaxqsize10
#defineoverlow0
#defineerror0
#defineok1
typedefstruct{
char*base;
intfront;
intrear;
}sqqueue;
intinitqueue_sq(sqqueue*q){//初始化顺序队
q->base=(char*)malloc(maxqsize*sizeof(char));
if(!q->base)
returnoverlow;//存储分配失败
q->front=q->rear=0;
returnok;
}
intenqueue_sq(sqqueue*q,chare){//e插入队尾作为新元素
if((q->rear+1)%maxqsize==q->front)
returnerror;//存储分配失败
q->base[q->rear]=e;
q->rear=(q->rear+1)%maxqsize;
returnok;
}
intdequeue_sq(sqqueue*q,char*e){//出队,返回首元素e的值
if(q->front==q->rear)
returnerror;
*e=q->base[q->front];
q->front=(q->front+1)%maxqsize;
returnok;
}
intqueuelength_sq(sqqueue*q)//求对长
{
return(q->rear-q->front+maxqsize)%maxqsize;
}
intqueuetr**erse_sq(sqqueueq,int(*visit)()){//遍历顺序循环队
inti,n;
n=queuelength_sq(&q);
for(i=0;i<n;i++)
visit(q.base+i);
returnok;
}
intvisit(char(q.base)){
printf("%c",*(q.base));
returnok;
}
intmain(){
sqqueueq;
chare;
inti,n,m;
initqueue_sq(&q);
printf("inputthe**mberofthedatas:");
scanf("%d",&n);
for(i=0;i<n;i++){
fflush(stdin);
printf("enterthequeue:");
scanf("%c",&e);
if(!enqueue_sq(&q,e)){
printf("thequeueisfull!\n");
bre**;
}
}
printf("tr**ersethequeuenow:");
queuetr**erse_sq(q,int(*e));
printf("\nthelengthofthequeueis%d\n",queuelength_sq(&q));
printf("inputthe**mberofthedatastoout:");
scanf("%d",&m);
for(i=0;i<m;i++){
printf("outputthefirstdatainthequeue:");
dequeue_sq(&q,&e);
printf("%c\n",e);
}
printf("tr**ersethequeuenow:");
queuetr**erse_sq(q,(*visit));
printf("\nthelengthofthequeueis%d\n",queuelength_sq(&q));
}希望大家能够帮助她。
详细问题描述及疑问:#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#definemaxqsize10
#defineoverlow0
#defineerror0
#defineok1
typedefstruct{
char*base;
intfront;
intrear;
}sqqueue;
intinitqueue_sq(sqqueue*q){//初始化顺序队
q->base=(char*)malloc(maxqsize*sizeof(char));
if(!q->base)
returnoverlow;//存储分配失败
q->front=q->rear=0;
returnok;
}
intenqueue_sq(sqqueue*q,chare){//e插入队尾作为新元素
if((q->rear+1)%maxqsize==q->front)
returnerror;//存储分配失败
q->base[q->rear]=e;
q->rear=(q->rear+1)%maxqsize;
returnok;
}
intdequeue_sq(sqqueue*q,char*e){//出队,返回首元素e的值
if(q->front==q->rear)
returnerror;
*e=q->base[q->front];
q->front=(q->front+1)%maxqsize;
returnok;
}
intqueuelength_sq(sqqueue*q)//求对长
{
return(q->rear-q->front+maxqsize)%maxqsize;
}
intqueuetr**erse_sq(sqqueueq,int(*visit)()){//遍历顺序循环队
inti,n;
n=queuelength_sq(&q);
for(i=0;i<n;i++)
visit(q.base+i);
returnok;
}
intvisit(char(q.base)){
printf("%c",*(q.base));
returnok;
}
intmain(){
sqqueueq;
chare;
inti,n,m;
initqueue_sq(&q);
printf("inputthe**mberofthedatas:");
scanf("%d",&n);
for(i=0;i<n;i++){
fflush(stdin);
printf("enterthequeue:");
scanf("%c",&e);
if(!enqueue_sq(&q,e)){
printf("thequeueisfull!\n");
bre**;
}
}
printf("tr**ersethequeuenow:");
queuetr**erse_sq(q,int(*e));
printf("\nthelengthofthequeueis%d\n",queuelength_sq(&q));
printf("inputthe**mberofthedatastoout:");
scanf("%d",&m);
for(i=0;i<m;i++){
printf("outputthefirstdatainthequeue:");
dequeue_sq(&q,&e);
printf("%c\n",e);
}
printf("tr**ersethequeuenow:");
queuetr**erse_sq(q,(*visit));
printf("\nthelengthofthequeueis%d\n",queuelength_sq(&q));
}期待您的答案,我不知道说什么才好,除了谢谢
!