
C语言一个动态链表中插入节点的问题
原题如下:(1)用malloc函数开辟新节点。要求链表包含5个节点,从键盘输入节点中的有效数据,然后把这些节点的数据打印出来。要求使用函数creat()来建立函数,用li...
原题如下:
(1)用malloc函数开辟新节点。要求链表包含5个节点,从键盘输入节点中的有效数据,然后把这些节点的数据打印出来。要求使用函数creat()来建立函数,用list()函数来输出数据。5个职工的号码依次为0601,0603,0605,0607,0609。
(2)在(1)的基础上,新增加一个职工的数据。这个心节点不放在最后,而是按职工号的顺寻插入,新职工号为0606。编写一个函数insert()来插入节点。
我写的insert()函数不知道哪有问题,输入新职工后的数据后,程序运行就没下文了。麻烦各位帮忙看看,见笑了。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct labor
{
char number[10];
int salary;
struct labor *next;
};
struct labor *creat()
{
struct labor *head,*tail,*p;
int salary;
char number[10];
head=tail=NULL;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
while(salary)
{
p=(struct labor*)malloc(sizeof(struct labor));
strcpy(p->number,number);
p->salary=salary;
p->next=NULL;
if(head==0)
head=p;
else
tail->next=p;
tail=p;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
}
return head;
}
void list(struct labor *head)
{
struct labor *ptr;
if(head==NULL)
{ printf("No list found"); return;}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
printf("the number:%s\n",ptr->number);
printf("the salary:%d\n\n",ptr->salary);
}
}
struct labor *insert(struct labor *head)
{
struct labor *s,*pp;
char number[10];
int salary;
s=(struct labor*)malloc(sizeof(struct labor));
printf("Please enter the information:\n");
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",salary);
strcpy(s->number,number);
s->salary=salary;
s->next=NULL;
pp=head;
while(strcmp(pp->number,"0605")!=0)
{pp=pp->next;}
s->next=pp->next;
pp->next=s;
return head;
}
void main()
{
struct labor *head;
head=creat();
list(head);
insert(head);
list(head);
}
明白了,谢谢!竟然犯了这种错误。。。郁闷 展开
(1)用malloc函数开辟新节点。要求链表包含5个节点,从键盘输入节点中的有效数据,然后把这些节点的数据打印出来。要求使用函数creat()来建立函数,用list()函数来输出数据。5个职工的号码依次为0601,0603,0605,0607,0609。
(2)在(1)的基础上,新增加一个职工的数据。这个心节点不放在最后,而是按职工号的顺寻插入,新职工号为0606。编写一个函数insert()来插入节点。
我写的insert()函数不知道哪有问题,输入新职工后的数据后,程序运行就没下文了。麻烦各位帮忙看看,见笑了。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct labor
{
char number[10];
int salary;
struct labor *next;
};
struct labor *creat()
{
struct labor *head,*tail,*p;
int salary;
char number[10];
head=tail=NULL;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
while(salary)
{
p=(struct labor*)malloc(sizeof(struct labor));
strcpy(p->number,number);
p->salary=salary;
p->next=NULL;
if(head==0)
head=p;
else
tail->next=p;
tail=p;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
}
return head;
}
void list(struct labor *head)
{
struct labor *ptr;
if(head==NULL)
{ printf("No list found"); return;}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
printf("the number:%s\n",ptr->number);
printf("the salary:%d\n\n",ptr->salary);
}
}
struct labor *insert(struct labor *head)
{
struct labor *s,*pp;
char number[10];
int salary;
s=(struct labor*)malloc(sizeof(struct labor));
printf("Please enter the information:\n");
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",salary);
strcpy(s->number,number);
s->salary=salary;
s->next=NULL;
pp=head;
while(strcmp(pp->number,"0605")!=0)
{pp=pp->next;}
s->next=pp->next;
pp->next=s;
return head;
}
void main()
{
struct labor *head;
head=creat();
list(head);
insert(head);
list(head);
}
明白了,谢谢!竟然犯了这种错误。。。郁闷 展开
展开全部
我也是刚学数据结构,如果回答有问题 ,欢迎Hi我
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct labor
{
char number[10];
int salary;
struct labor *next;
};
struct labor *creat()
{
struct labor *head,*tail,*p;
int salary;
char number[10];
head=tail=NULL;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
while(salary)
{
p=(struct labor*)malloc(sizeof(struct labor));
strcpy(p->number,number);
p->salary=salary;
p->next=NULL;
if(head==0)
head=p;
else
tail->next=p;
tail=p;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
}
return head;
}
void list(struct labor *head)
{
struct labor *ptr;
if(head==NULL)
{ printf("No list found"); return;}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
printf("the number:%s\n",ptr->number);
printf("the salary:%d\n\n",ptr->salary);
}
}
struct labor *insert(struct labor *head)
{
//其实,为了维持和前边数据的一致,这里应该也判断一下薪水是否为0,如果为0则不执行插入操作
struct labor *s,*pp;
char number[10];
int salary;
s=(struct labor*)malloc(sizeof(struct labor));
printf("Please enter the information:\n");
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);//这里少了&,按题意只有这一处错误,下面的是我的建议
strcpy(s->number,number);
s->salary=salary;
s->next=NULL;
pp=head;
while(strcmp(pp->number,"0605")!=0&&pp->next!=NULL)//也不算什么大错误,如果你原来输入的结点中不包含number等于"0605"的结点的话将出现问题,这样修改,如果找不到对应结点,则把新的数据插到链表的尾部
{pp=pp->next;}
s->next=pp->next;
pp->next=s;
return head;
}
void main()
{
struct labor *head;
head=creat();
list(head);
insert(head);
list(head);
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct labor
{
char number[10];
int salary;
struct labor *next;
};
struct labor *creat()
{
struct labor *head,*tail,*p;
int salary;
char number[10];
head=tail=NULL;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
while(salary)
{
p=(struct labor*)malloc(sizeof(struct labor));
strcpy(p->number,number);
p->salary=salary;
p->next=NULL;
if(head==0)
head=p;
else
tail->next=p;
tail=p;
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);
}
return head;
}
void list(struct labor *head)
{
struct labor *ptr;
if(head==NULL)
{ printf("No list found"); return;}
for(ptr=head;ptr!=NULL;ptr=ptr->next)
{
printf("the number:%s\n",ptr->number);
printf("the salary:%d\n\n",ptr->salary);
}
}
struct labor *insert(struct labor *head)
{
//其实,为了维持和前边数据的一致,这里应该也判断一下薪水是否为0,如果为0则不执行插入操作
struct labor *s,*pp;
char number[10];
int salary;
s=(struct labor*)malloc(sizeof(struct labor));
printf("Please enter the information:\n");
printf("Please enter the number:");
scanf("%s",number);
printf("Please enter the salary:");
scanf("%d",&salary);//这里少了&,按题意只有这一处错误,下面的是我的建议
strcpy(s->number,number);
s->salary=salary;
s->next=NULL;
pp=head;
while(strcmp(pp->number,"0605")!=0&&pp->next!=NULL)//也不算什么大错误,如果你原来输入的结点中不包含number等于"0605"的结点的话将出现问题,这样修改,如果找不到对应结点,则把新的数据插到链表的尾部
{pp=pp->next;}
s->next=pp->next;
pp->next=s;
return head;
}
void main()
{
struct labor *head;
head=creat();
list(head);
insert(head);
list(head);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询