qq_28203043 2015-11-02 11:14 采纳率: 0%
浏览 2101

数据结构循环队列 为什么执行后的结果是这样,不能正确的输出结果

#include
#include
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define INIT_QUEUE_SIZE 5//当前分配的最大空间
#define QUEUEINCREMENT 10
typedef int Status;
typedef float QElemType ;
typedef struct
{
QElemType* base;//初始化的动态分配存储空间
int front;
int rear;
}SqQueue;

//循环队列基本操作的算法实现
Status InitQueue_sq(SqQueue &Q)
{
Q.base = (QElemType*)malloc(INIT_QUEUE_SIZE*sizeof(QElemType));
if(!Q.base)
exit(OVERFLOW);//分配空间失败
Q.front = Q.rear =0;
return OK;
}
//插入元素
Status EnQueue_sq(SqQueue &Q,QElemType &e)
{

//插入新的元素
if((Q.rear  +1)%INIT_QUEUE_SIZE ==Q.front )//空出来一个新的位置
{
    printf("空间满了!!,正在开辟空间\n");
Q.base  = (QElemType*)malloc((INIT_QUEUE_SIZE+QUEUEINCREMENT)*sizeof(QElemType));
Q.base [Q.rear ]=e;
Q.rear =(Q.rear ++)%INIT_QUEUE_SIZE;//没插入一个元素,rear就要加一;
}
else
{

    Q.base [Q.rear ]=e;
  Q.rear =( Q.rear +1)%INIT_QUEUE_SIZE;//没插入一个元素,rear就要加一;
}
 return  0;

}

//删除元素.用e返回删除元素
Status DeQueue_sq(SqQueue &Q,QElemType &e)
{
if(Q.front =Q.rear )
{
printf("这是一个空的循环队列\n");
return ERROR;
}

e = Q.base [Q.front ];
Q.front =(Q.front +1)%INIT_QUEUE_SIZE;
return OK;

}

//输出数据的函数
void PrintQueue_sq(SqQueue Q)

{

int i;

if(Q.front ==Q.rear ) printf("空队列!\n");

else

{

i=Q.front;

while(i!=Q.rear)

{

printf("%d ",Q.base[i]);

i=(i+1)%INIT_QUEUE_SIZE;

}

printf("\n");

}   

}

int main()
{
printf(" 对循坏队列的基本操作如下 \n ");
int num;//插入元素的个数
int j;//控制循环
QElemType elem;//元素
SqQueue Q;
//初始化
InitQueue_sq(Q);

//插入元素
printf("输入插入元素的个数:");
scanf("%d",&num);
printf("\n");
printf("输入需要插入的数据:");
for(j=0;j<num;j++)
{
    scanf("%d",&elem);
    EnQueue_sq(Q,elem );
}
     printf("插入操作后循环队列中的数为:");
PrintQueue_sq(Q);//输出队列



//删除队列
printf("输入需要删除队列的元素个数::");
scanf("%d",&num);
printf("输出删除的额元素为:");

for(j = 0;j<num;j++)
{
    DeQueue_sq(Q,elem);
    printf("%d",elem);
}

printf("删除操作后循环队列中的数为:");

PrintQueue_sq(Q);

return 0;
}

  • 写回答

1条回答 默认 最新

  • 林凤g 2015-11-02 12:32
    关注

    提问题敢不敢认真点啊,这两坨代码是什么意思啊?布局也很让人不舒服啊噻
    简单说下看出来的小问题:
    1、既然队列满后可以开辟空间,那要INIT_QUEUE_SIZE就没意义了,开辟空间后,INIT_QUEUE_SIZE要相应加1的,可都定义了怎么改
    2、如果输入5个元素,会进入死循环,不信你试试。在while(i!=Q.rear)这里判断时要分出这种情况
    3、插入函数,函数调用是用引用,定义时参数要用指针,这样才能修改队列值啊亲
    其他请原谅我实在看不下去了。。。

    建议:照着别人能运行通的代码自己多写写,照着人家的练,出问题了还能有个对照,知道出在哪,要不然问题太多了,完全不知道怎么下手好了呢

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器