重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你的不是调试的问题,是照搬《数据结构》教材p61-62上算法,那是伪代码!无法运行!
创新互联专注于企业网络营销推广、网站重做改版、宣汉网站定制设计、自适应品牌网站建设、H5建站、商城网站建设、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为宣汉等各大城市提供网站开发制作服务。
修改了以下内容:
1、函数中间的形参必须改成指针:如 int InitQueue(LinkQueue Q)改成 int InitQueue(LinkQueue *Q)
2、没有头文件定义Overflow
3、output函数算法错误!换成vist
4、主函数的调用有很多小问题
代码和运行结果如下:
#includestdio.h
#include stdlib.h
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePrt;
typedef struct
{
QueuePrt front;
QueuePrt rear;
}LinkQueue;
int InitQueue(LinkQueue *Q)
{ /* 构造一个空队列Q */
(*Q).front=(*Q).rear=(QueuePrt)malloc(sizeof(QNode));
if(!(*Q).front)
exit(0);
(*Q).front-next=NULL;
return 1;
}
/*int InitQueue(LinkQueue Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit (OVERFLOW);
Q.front-next=NULL;
return 1;
}*/
int creatQueue(LinkQueue *Q)
{
int i,n;
QueuePrt s;
printf("inpur num:\n");
scanf("%d",n);
printf("inpur numbers:\n");
for(i=0;1n;i++)
{
s=(QueuePrt)malloc(sizeof (QNode));
scanf("%d",s-data);
Q-rear-next=s;
Q-rear=s;
s=s-next;
}
Q-rear-next=NULL;
return 1;
}
int EnQueue(LinkQueue *Q,int e)//插入元素e
{ QueuePrt p;
printf("input");
p=(QueuePrt)malloc(sizeof(QNode));
if(!p)exit(0);//存储分配失败
p-data=e;
p-next=NULL;
Q-rear-next=p;
Q-rear=p;
return 1;
}
int DeQueue(LinkQueue *Q,int e)//删除队头元素e
{QueuePrt p;
if(Q-front==Q-rear)
return 0;
p=Q-front-next;
e=p-data;
Q-front-next=p-next;
if(Q-rear==p)
Q-rear=Q-front;
free(p);
return 1;
}
/*int output(LinkQueue Q)//出队,想输出来(这个算法是错误的,需要输出全部元素用上面这个Dequeue,需要输出队首用下面这个vist
{LinkQueue *s;
s=Q;
QueuePrt p;
p=s-front-next;
while(p!=NULL) {
printf("%3d",p-data);
p=p-next;}
}*/
int vist(LinkQueue Q,void(*vi)(int))
{ /* 从队头到队尾依次对队列Q中每个元素调用函数vi()。一旦vi失败,则操作失败 */
QueuePrt p;
p=Q.front-next;
while(p)
{
vi(p-data);
p=p-next;
}
printf("\n");
return 1;
}
void vi(int i)
{
printf("%d ",i);
}
void main()
{ int i,d;
LinkQueue q;
i=InitQueue(q);
if(i)printf("成功地构造了一个空队列!\n");
EnQueue(q,-5);
EnQueue(q,5);
EnQueue(q,10);
printf("队列的元素依次为:");
vist(q,vi);
//出队Dequeue自己做
}
程序一共帮你修改了错误数十个,功夫费了不少,出队Dequeue请模仿上面自己做
像这种有代码的题,最好的解决方法就是在编译器直接编译一下。
下面是我运行的结果:
题目解析:
1、这道题目应该考察的是对static的理解。
2、static 修饰的变量在程序运行开始, 到结束,只会被定义一次,而且内存是共享的。
3、所以在第二次执行vist()函数是, key的值是在第一执行的基础上进行的key++。、
如果以上问题对你有帮助,请采纳一下,谢谢。
C语言下,vi 不是标准库函数,是用户自定义函数。
在计算领域里,vi一般是指一款文字编辑器。
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器。对于Unix及Linux系统的任何版本,vi编辑器是完全相同的。vi也是Linux中最基本的文本编辑器,学会它后,将在Linux的世界里畅行无阻。