#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>