链表

来源:互联网 发布:各班级出勤率数据图表 编辑:程序博客网 时间:2024/05/17 04:08
#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