链表“插入节点”模块(3)

任务要求 根据提示,在右侧编辑器的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");
}

 

 

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值