数据结构循环队列{顺序表示}

beierqaz 2010-11-28 01:11:44
为什么如下代码运行后,界面一闪而过,不能停留。另外运行到红色部分(第二次调用length)的时候为什么长度还是显示为0,怎么让它能显示重新插入数据后的长度
#include<stdio.h>
#include<stdlib.h>
typedef int QElemType;
typedef int Status;
#define ok 1
#define error -2
typedef struct
{
QElemType *base;
int front;
int rear;
int emptyflag;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=(QElemType*)malloc(100*sizeof(QElemType));
if(!Q.base) exit(-1);
Q.front=Q.rear=0;
Q.emptyflag=1;
return ok;
}
int QueueLength(SqQueue Q)
{
if(Q.emptyflag) return 0;
else if(Q.front==Q.rear) return 100;
else return(Q.rear-Q.front+100)%100;
}
Status EnQueue(SqQueue &Q,QElemType f)
{
if(Q.emptyflag) Q.emptyflag=0;
else if(Q.front==Q.front) return error;
Q.base[Q.rear]=f;
Q.rear=(Q.rear+1)%100;
return ok;
}
Status GetHead(SqQueue Q,QElemType &e)
{
if(Q.emptyflag) return error;
else e=Q.base[Q.front];
return ok;
}
Status DeQueue(SqQueue &Q,QElemType &g)
{
if(Q.emptyflag) return error;
g=Q.base[Q.front];
Q.front=(Q.front+1)%100;
if(Q.front==Q.rear) Q.emptyflag=1;
return ok;
}

void main()
{
int i;
QElemType e,f,g;
SqQueue Q;
InitQueue(Q);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
for(i=1;i<=5;i++){
scanf("%d",&f);
EnQueue(Q,f);
}
GetHead(Q,e);
printf("%d\n",e);
DeQueue(Q,g);
printf("%d\n",g);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
}
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KID_coder 2010-11-28
  • 打赏
  • 举报
回复
加暂停就不会一闪而过~~
在main结尾加system("puase");
另外入队函数有点错误才会显示0

Status EnQueue(SqQueue &Q,QElemType f)
{
if(Q.emptyflag) Q.emptyflag=0;
else if(Q.front==Q.front) return error; // 改成else if(Q.front==Q.rear) return error;
Q.base[Q.rear]=f;
Q.rear=(Q.rear+1)%100;
return ok;
}
無_1024 2010-11-28
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>//加一个暂停的就可以了
typedef int QElemType;
typedef int Status;
#define ok 1
#define error -2
typedef struct
{
QElemType *base;
int front;
int rear;
int emptyflag;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=(QElemType*)malloc(100*sizeof(QElemType));
if(!Q.base) exit(-1);
Q.front=Q.rear=0;
Q.emptyflag=1;
return ok;
}
int QueueLength(SqQueue Q)
{
if(Q.emptyflag) return 0;
else if(Q.front==Q.rear) return 100;
else return(Q.rear-Q.front+100)%100;
}
Status EnQueue(SqQueue &Q,QElemType f)
{
if(Q.emptyflag) Q.emptyflag=0;
else if(Q.front==Q.rear) return error;//-+-------------------------写错了
Q.base[Q.rear]=f;
Q.rear=(Q.rear+1)%100;
return ok;
}
Status GetHead(SqQueue Q,QElemType &e)
{
if(Q.emptyflag) return error;
else e=Q.base[Q.front];
return ok;
}
Status DeQueue(SqQueue &Q,QElemType &g)
{
if(Q.emptyflag) return error;
g=Q.base[Q.front];
Q.front=(Q.front+1)%100;
if(Q.front==Q.rear) Q.emptyflag=1;
return ok;
}

void main()
{
int i;
QElemType e,f,g;
SqQueue Q;
InitQueue(Q);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
for(i=1;i<=5;i++){
scanf("%d",&f);
EnQueue(Q,f);
}
GetHead(Q,e);
printf("%d\n",e);
DeQueue(Q,g);
printf("%d\n",g);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
getch();//暂停的
}
無_1024 2010-11-28
  • 打赏
  • 举报
回复
还有你的瑞对的操作有问题
無_1024 2010-11-28
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>//加一个暂停的就可以了
typedef int QElemType;
typedef int Status;
#define ok 1
#define error -2
typedef struct
{
QElemType *base;
int front;
int rear;
int emptyflag;
}SqQueue;
Status InitQueue(SqQueue &Q)
{
Q.base=(QElemType*)malloc(100*sizeof(QElemType));
if(!Q.base) exit(-1);
Q.front=Q.rear=0;
Q.emptyflag=1;
return ok;
}
int QueueLength(SqQueue Q)
{
if(Q.emptyflag) return 0;
else if(Q.front==Q.rear) return 100;
else return(Q.rear-Q.front+100)%100;
}
Status EnQueue(SqQueue &Q,QElemType f)
{
if(Q.emptyflag) Q.emptyflag=0;
else if(Q.front==Q.front) return error;
Q.base[Q.rear]=f;
Q.rear=(Q.rear+1)%100;
return ok;
}
Status GetHead(SqQueue Q,QElemType &e)
{
if(Q.emptyflag) return error;
else e=Q.base[Q.front];
return ok;
}
Status DeQueue(SqQueue &Q,QElemType &g)
{
if(Q.emptyflag) return error;
g=Q.base[Q.front];
Q.front=(Q.front+1)%100;
if(Q.front==Q.rear) Q.emptyflag=1;
return ok;
}

void main()
{
int i;
QElemType e,f,g;
SqQueue Q;
InitQueue(Q);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
for(i=1;i<=5;i++){
scanf("%d",&f);
EnQueue(Q,f);
}
GetHead(Q,e);
printf("%d\n",e);
DeQueue(Q,g);
printf("%d\n",g);
QueueLength(Q);
printf("%d\n",QueueLength(Q));
getch();//暂停的
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧