任务要求
根据提示,在右侧编辑器的Program-End
区域内补充代码,完成“插入结点”模块功能。
输入要求
输入内容包含两部分内容,第一部分内容通过struct STUDENT *createList()
输入学生的姓名和成绩,实现链表创建;第二部分输入一个字符串name(1<=len(name)<=10)
,表示需要插入学生的姓名;输入一个整数,表示该学生的成绩。要求将该学生插入到姓名为“Tom”的学生之后。
输出要求
输出内容包括三部分内容,第一部分内容通过void outputLinkedList(struct STUDENT *head);
输出链表全部结点内容。第二部分内容:当结点插入成功时,输出“Insert node success”(不包含双引号),否则输出“Insert node fail”(不包含双引号)。第三部分内容通过void outputLinkedList(struct STUDENT *head);
输出新链表全部结点内容。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct STUDENT
{
char name[20];
int score;
struct STUDENT *next;
};
struct STUDENT *createList(); //创建链表
void outputLinkedList(struct STUDENT *head); //遍历链表
void insertNode(struct STUDENT *head); //插入节点
void sysMenu(); //系统菜单
int main()
{
struct STUDENT *head;
sysMenu();
head=createList();
outputLinkedList(head);
insertNode(head);
outputLinkedList(head);
return 0;
}
struct STUDENT *createList() //定义创建链表函数
{
struct STUDENT *head,*p,*q;
char name[20];
/**********Program**********/
head=(struct STUDENT*)malloc(sizeof(struct STUDENT));
q=head;
/********** End **********/
printf("Please input student's name('none' means end of input):");
scanf("%s",name);
while(strcmp(name,"none")!=0)
{
/**********Program**********/
p=(struct STUDENT*)malloc(sizeof(struct STUDENT));
q->next=p;
q=p;
strcpy(q->name,name);
printf("Please input %s's score:",name);
scanf("%d",&(q->score));
printf("Please input student's name('none' means end of input):");
scanf("%s",name);
/********** End **********/
}
q->next=NULL;
return head;
}
void outputLinkedList(struct STUDENT *head) //定义遍历链表函数
{
struct STUDENT *p;
printf("\noutput links'node name and score:\n");
for(p=head->next; p!=NULL; p=p->next)
{
printf("Name is %s,Score is %d\n",p->name,p->score);
}
}
void insertNode(struct STUDENT *head) //定义插入节点函数
{
struct STUDENT *p,*q;
/**********Program**********/
int flag=0;
p=head;
while(1){
p=p->next;
if(strcmp(p->name,"Tom")==0){
flag=1;
break;
}
if(p->next==NULL){
break;
}
}
if(flag){
q=(struct STUDENT*)malloc(sizeof(struct STUDENT));
scanf("%s",q->name);
scanf("%d",&(q->score));
q->next=p->next;
p->next=q;
printf("Insert node success\n");
}
else{
printf("Insert node fail\n");
}
/********** End **********/
}
void sysMenu() //定义系统菜单函数
{
printf("====================\n");
printf(" link's operator\n");
printf(" 1. create Link\n");
printf(" 2. forEach Link\n");
printf(" 3. query score\n");
printf(" 4. insert node\n");
printf(" 5. delete node\n");
printf(" 0. exit\n");
printf("====================\n");
}