c语言问题

有三个子函数locate().insert().creat().其中locate产生一个常数q.insert中要用到这个值。在creat中调用函数locate和inser... 有三个子函数locate(). insert(). creat().其中locate产生一个常数q. insert中要用到这个值。在creat中调用函数locate和insert。但是insert中没有调用locate 这样的话 这个q值还能不能被insert利用。不能的话在insert中怎么调用locate呢?谢谢各位大神。。。
说的有点绕,下面是这三个函数。
int q;
int LocateNode(LinkList L,DataType e)
{
ListNode *p=L->next;
q=0;
while(p && e.expn<p->data.expn)
{
p=p->next;
q++;
}

if (p==NULL ||e.expn!=p->data.expn)
return 0;
else
return 1;
}

LinkList InsertNode(LinkList L,DataType e)
{
ListNode *s,*p;
int i=0;
p=L;
while (p->next &&i<q)
{
p=p->next;
i++;
s=(ListNode *)malloc(sizeof(ListNode));
s->data.coef=e.coef;
s->data.expn=e.expn;
s->next=p->next;
p->next=s;
return L;
}

LinkList CreatPolyn(LinkList La,int n)
{
LinkList Pa;
int i;
DataType e;
Pa=(ListNode *)malloc(sizeof(ListNode));
Pa->next=NULL;
for(i=1;i<=n;i++)
{
scanf("%f,%d",&e.coef,&e.expn);
if(!LocateNode(Pa,e))
Pa=InsertNode(Pa,e);
}
return Pa;
}
展开
 我来答
王囧囧1988
2013-09-24 · TA获得超过132个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:109万
展开全部

    大概看了一下,楼主的意思是

  1. 通过CreatPolyn创建一个链表,而且貌似元素是根据expn的值有序排列的

  2. 创建时首先搜索待插入元素的关键字是否存在,不存在才插入

  3. 插入的时候,楼主不想再做一次比较了,因此搞了个q想来保存插入的位置

    抛开逻辑不谈,如果这三个函数的实现与q的定义在一个文件中,那么q就是全局变量,可以被本文件的代码所访问,这一点建议楼主学习一下全局变量的相关知识。

    关于效率,其实再次搜索一次也无妨,因为while(p && e.expn<p->data.expn)
与while (p->next &&i<q)的执行效率没有很大的差别。而且不在这里使用全局变量,也可以增加各个功能函数间的独立性,易于阅读代码,减少bug的出现。

time881
2013-09-24
知道答主
回答量:4
采纳率:0%
帮助的人:5660
展开全部
就把q定义为常变量吧:const int p;
或定义指向它的指针:int * p
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
du3394624
2013-09-24 · TA获得超过433个赞
知道小有建树答主
回答量:1054
采纳率:0%
帮助的人:338万
展开全部
链表高级。。。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式