链表

#include <stdlib.h>
#include <string.h>


typedef struct student
{
    char name[20];
    int score;
    struct student * next; 
}STU;


// 任务一、创建带头结点的链表 
// 问题描述:
// 编写函数,创建带头结点的链表。函数原型为STU *createdList(void)。(返回值为链表的头结点地址。)
STU * createdList(void)
{
    STU * pStu = (STU *)malloc(sizeof(STU));
    strcpy(pStu->name, "");
    pStu->score = 0;
    pStu->next = NULL;
    return pStu;
}


// 任务二、在链表末尾添加新的结点 
// 问题描述:
// 编写函数,将新的学生信息添加到该链表的末尾。函数 原型为int insertRecordFromBack(STU *aHead, char *aName, int score)。
//(STU *aHead是链表的头指针,char *aName是要插入学生的名字,int score是要插入学生的分数。)添加成功返回值为1,否则为0。
int insertRecordFromBack(STU * aHead, char * aName, int score)
{
    STU * pNewStu = (STU *)malloc(sizeof(STU));
    if(pNewStu == NULL)
        return 0;


    strcpy(pNewStu->name, aName);
    pNewStu->score = score;
    pNewStu->next = NULL;


    while(aHead->next != NULL)<span style="white-space:pre">	</span> 
        aHead = aHead->next;
    aHead->next = pNewStu;


    return 1;
}


// 任务三、删除链表中指定的结点 
// 问题描述:
// 编写函数,实现将指定的学生信息从链表中删除的功 能。函数原型为int deleteRecordFromList(STU *aHead, char *aName)。
//(STU *aHead是链表的头指针,char *aName代表要删除学生的名字。)删除成功返回值为1,否则为0。
int deleteRecordFromList(STU * aHead, char * aName)
{
    STU * pTemp = NULL;
    int nRtn = 0;
    // 此链表头结点数据为空,所以跳过
    while(aHead->next != NULL)
    {
        if(strcmp(aHead->next->name, aName) == 0)
        {
            pTemp = aHead->next;
            aHead->next = pTemp->next;
            free(pTemp);
            pTemp = NULL;
            nRtn = 1;
            // 不考虑存在多个符合条件节点时,可在此处直接return;
        }
        else
        {
            aHead = aHead->next;
        }
    }
    return nRtn;
}


// 任务四 、 在链表中查找节点并修改该结点 
// 问题描述:
// 编写函数,按照学生姓名在链表中查找学生个人信息,找到后将该生的成绩修改为新成绩, 
// 函数原型为int findAndEdit(STU *aStu, char *aName, int aScore)。
// (STU *aHead代表链表的头指针,char *aName代表要查找学生的名字。int aScore代表该学生的新成绩)
// 任务要求:
// 找到该学生的个人信息并修改成功返回1,未找到返回 0。
int findAndEdit(STU * aHead, char * aName, int aScore)
{
    // 此链表头结点数据为空,所以跳过
    while(aHead->next != NULL)
    {
        if(strcmp(aHead->next->name, aName) == 0)
        {
            aHead->next->score = aScore;
            return 1;
        }
        else
            aHead = aHead->next;
    }
    return 0;
}


void printfList(STU * aHead)
{
    while(aHead->next != NULL)
    {
        printf("%s %d\n", aHead->next->name, aHead->next->score);
        aHead = aHead->next;
    }
    return;
}
int main(void)
{
    STU * stu = createdList();
    
    insertRecordFromBack(stu, "zhangsan", 80);
    insertRecordFromBack(stu, "zhangsi", 83);
    insertRecordFromBack(stu, "zhangwu", 82);
    insertRecordFromBack(stu, "zhangsan", 81);
    insertRecordFromBack(stu, "zhangliu", 84);
    printfList(stu);
    puts("=================================");
    
    deleteRecordFromList(stu, "zhangsan");
    printfList(stu);
    puts("=================================");


    findAndEdit(stu, "zhangsi", 100);
    printfList(stu);
    puts("=================================");
    


    return 0;
}	</span>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值