标题:[求助]实在想不出什么法子让它最优化
取消只看楼主
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
 问题点数:0 回复次数:2 
[求助]实在想不出什么法子让它最优化

刚编了个链表程序,建立一个链表,每个结点包括:学号,姓名,性别,年龄。输入一个年龄,如果链表中的结点所含的年龄等于此年龄,则将此结点删除。之中遇到个问题,不管输入的该年龄在链表的有没有,有一个或者是几个,还是全部,红色部分的for语句都要循环m(原链表的总结点数)次,实在想不出什么法子让它最优化,所以我干脆管它黑猫白猫都循环m次。大家出出点子,谢谢了!

#include<malloc.h>
#define LEN sizeof(struct student)

struct student
{
long num;
char name[20];
char sex[5];
int age;
struct student *next;
};
int m;
int flag=0;
struct student *creat(void)
{
struct student *head,*p1,*p2;
p1=p2=(struct student*)malloc(LEN);
scanf("%ld%s%s%d",&(p1->num),p1->name,p1->sex,&(p1->age));
head=NULL;
m=0;
while(p1->num!=NULL)
{m=m+1;
if(head==NULL)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%ld%s%s%d",&(p1->num),p1->name,p1->sex,&(p1->age));
}
p2->next=NULL;
return head;
}
struct student *deleteage(struct student *head,int n)
{
struct student *p1,*p2;
p1=head;
while(n!=p1->age&&p1!=NULL)
{
p2=p1;
p1=p1->next;
}
if(n==p1->age)
{
if(p1==head)head=p1->next;
else
p2->next=p1->next;
flag=flag+1;
}
return(head);
}
main()
{
struct student *head,*p;
int i,AGE;
printf("\ndata [num name sex age]:\n");
head=creat();
printf("\nInput age delete: age=");
scanf("%d",&AGE);
for(i=0;i<m;i++)
head=deleteage(head,AGE);
if(flag==0)printf("\nage %d not been found!",AGE);
else
{
p=head;
printf("\noutput data after deleted:\nnum name sex age\n");
while(p!=NULL)
{
printf("%ld%8s%6s%6d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}
}
getch();
}

搜索更多相关主题的帖子: 链表 法子 白猫 最优化 结点 
2006-11-03 23:03
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
得分:0 
谢谢,不过链表建立有什么bug呢?我找不出来

新王登基,血流成河!
2006-11-04 17:54
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
得分:0 
呵呵,我是初学者哈,都是按书上的习惯,谢谢你的建议

新王登基,血流成河!
2006-11-05 21:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-100638-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065926 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved