c语言链表,有一个函数运行有错误,编译没错,不明白哪里错了,求大神指点
boolListInsert(StudentList*&L)//将新输入的考生信息插入考生列表{StudentList*p=L,*s;doublenumber;inti=...
bool ListInsert(StudentList *&L) //将新输入的考生信息插入考生列表
{
StudentList *p=L,*s;
double number;
int i=0;
int age;
bool w=false;
s=(StudentList *)malloc(sizeof(StudentList));
printf("请输入要插入的考生准考证号:");
scanf("%d",&number);
while(p!=NULL&&p->examno!=number)
{
p=p->next;
i++;
}
if(p==NULL)
i=0;
if(i!=0){
printf("准考证号为%d的考生信息已录入,插入失败!",number);
return false;
}
else{
s->examno=number;
printf("\n 姓名: \n");
scanf("%s",&s->name);
printf("\n 性别: \n");
scanf("%s",&s->sex);
printf("\n 年龄: \n");
scanf("%d",&age);
s->age=age;
printf("\n报考类别:\n");
scanf("%s",&s->examtype);
s->next=p->next;
p->next=s;
printf("插入考生信息成功!\n");
return true;
}
}
顺便问下防止重复数据插入还有什么办法吗? 展开
{
StudentList *p=L,*s;
double number;
int i=0;
int age;
bool w=false;
s=(StudentList *)malloc(sizeof(StudentList));
printf("请输入要插入的考生准考证号:");
scanf("%d",&number);
while(p!=NULL&&p->examno!=number)
{
p=p->next;
i++;
}
if(p==NULL)
i=0;
if(i!=0){
printf("准考证号为%d的考生信息已录入,插入失败!",number);
return false;
}
else{
s->examno=number;
printf("\n 姓名: \n");
scanf("%s",&s->name);
printf("\n 性别: \n");
scanf("%s",&s->sex);
printf("\n 年龄: \n");
scanf("%d",&age);
s->age=age;
printf("\n报考类别:\n");
scanf("%s",&s->examtype);
s->next=p->next;
p->next=s;
printf("插入考生信息成功!\n");
return true;
}
}
顺便问下防止重复数据插入还有什么办法吗? 展开
1个回答
2016-06-29
展开全部
就是前面和后面有点问题,直接用下面的替换掉对应的部分就行了。你去私信里复制代码吧,私信里复制粘贴后不是一整行。#include#include#include/*-----------------------------------数据类型定义----------------------------------------*/typedefstructnode{intdata;//链表结构,链表的数据域structnode*next;//链表的结构,链表的指针域}LINKLIST;LINKLIST*set();//声明将要用到的建立链表的函数voidinsert(LINKLIST*);//这里声明了一个插入添加数据的函数!!!声明一个带有参数的函数的时候记得传递参数!voidoutput(LINKLIST*);//声明一个输出函数voiddel(LINKLIST*);//删除一个数据的声明voidalter(LINKLIST*);//修改一个结点的数据voidselect(LINKLIST*);//查询某个位置的数据voidselect1(LINKLIST*);//高级查询,查询数据所在的位置/*------------------------------------主函数----------------------------------------*/voidmain()//主函数./*---------------------------------------------查询某个结点在哪几个位置上出现---------------------------------------------*/voidselect1(LINKLIST*SQ){LINKLIST*q;LINKLIST*p;q=(LINKLIST*)malloc(sizeof(LINKLIST));p=(LINKLIST*)malloc(sizeof(LINKLIST));p->data=-1;q=p;printf("Pleaseinputthequerynodedata:");intdata;//intsum[100];//sum[0]=-1;scanf("%d",&data);for(inti=1,j=0;SQ->data!=NULL;i++)//如果SQ不是空的则一直检索下去{if(SQ->data==data)//如果检索到相同的就将这个结点的位置保存到sum数组中。{q->data=i;q=q->next;//sum[j+1]=sum[j];//sum[j]=i;//j++;}SQ=SQ->next;}if(p->data==-1)//如果检索完之后sum[0]还是-1那么就输出没有找到{printf("Didnotfindthesamedata");}else//否则输出数据{while(p->data!=NULL){printf("%d",p->data);p=p->next;}//intj=1;//while(sum[0]!=-1)//{//printf("%d\t",sum[j]);//j++;//}}}}}/*------------------------------------定义插入结点链表函数----------------------------------------*/LINKLIST*set()//定义插入结点链表函数{printf("pleaseinputtheintegertoinster:\n");/*Q是用来返回的头结点,P用来新建结点,Prep用来设置表尾结点。Prep*/LINKLIST*P,*Q,*Prep;intx=0;Q=(LINKLIST*)malloc(sizeof(LINKLIST));//为要输入的链表指针定义空间。Q->data=-1;Q->next=NULL;Prep=Q;//把Q给了PrepQ依旧是头结点,以后输入每一次都给Prep赋值。scanf("%d",&x);//输入要插入的数值。while(x!=-1){P=(LINKLIST*)malloc(sizeof(LINKLIST));P->data=x;//使用P作为一个中转链结点,P->next=NULL;Prep->next=P;//链表的最后一个结点的后一个结点为PPrep=Prep->next;//保证Prep一直是最后。因为每次插入表尾结点都是在最后。scanf("%d",&x);P=P->next;//这样的话可以随时释放临时的P结点,节约空间。Prep->next=NULL;//结点的最后一个为空}free(P);/*如果没有P=P->next;这里的P不可以释放。因为当时P的值是给了Prep->next的。又执行Prep=Prep->next导致现在得P是链表中的最后一个结点。*/return(Q);}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询