![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
求教,C语言程序设计题,学生信息链表的…………跪求各位帮帮忙,江湖救急,谢谢
题目如下:建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。⑵要求...
题目如下:
建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。
⑵要求
在程序中定义了三个函数:
void init(); //初始化链表
void create(); //创建学生成绩信息链表
void disp(); //输出链表信息
定义一个查询函数void search(int number),其中,参数是学生的学号。如果链表中存在该学号的的结点,则显示此结点的数据,否则输出没有该学号的结点。
定义一个删除函数void del(int number),用于删除指定学号的结点。如果链表中存在该学号的的结点,则删除该结点,否则显示链表中没有该学号的结点。
最好能附上算法思路,谢谢………… 展开
建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。
⑵要求
在程序中定义了三个函数:
void init(); //初始化链表
void create(); //创建学生成绩信息链表
void disp(); //输出链表信息
定义一个查询函数void search(int number),其中,参数是学生的学号。如果链表中存在该学号的的结点,则显示此结点的数据,否则输出没有该学号的结点。
定义一个删除函数void del(int number),用于删除指定学号的结点。如果链表中存在该学号的的结点,则删除该结点,否则显示链表中没有该学号的结点。
最好能附上算法思路,谢谢………… 展开
1个回答
展开全部
新建一个win32的工程,建立一cpp文件,复制粘贴代码,运行OK。好运
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct StudentInfo // 单个学生信息节点
{
int iNum; // 学号
char acName[20]; // name不能超过20个字符
float fScore; // 成绩
StudentInfo* next; // 下一个地址
};
struct StudentMgr // 学生信息管理类
{
int iCount; // 学生人数
StudentInfo* first; // 第一个学生地址
};
StudentMgr g_StuMrg; // 管理类全局管理对象
void Init(); // 初始化
void Create(); // 创建一个学生信息
void Display(); // 展示学生信息
void Search(int iNum); // 查找
void Delete(int iNum); // 删除
void Free(); // 内存清理
void Init()
{
g_StuMrg.iCount = 0;
g_StuMrg.first = NULL;
}
void Create()
{
int iA;
char acB[20];
float fC;
printf("请输入学生ID:\n");
scanf("%d",&iA);
printf("请输入学生name:\n");
scanf("%s",&acB);
printf("请输入学生成绩:\n");
scanf("%f",&fC);
StudentInfo* tem = g_StuMrg.first;
while(tem)
{
if(tem->iNum == iA)
{
printf("学生已经存在\n\n");
return;
}
tem = tem->next;
}
StudentInfo* newInfo = (StudentInfo*)malloc(sizeof(StudentInfo));
newInfo->iNum = iA;
strcpy(newInfo->acName,acB);
newInfo->fScore = fC;
newInfo->next = NULL;
if(g_StuMrg.iCount == 0)
g_StuMrg.first = newInfo;
else
{
StudentInfo* tem = g_StuMrg.first;
while(tem && tem->next)
tem = tem->next;
tem->next = newInfo;
}
g_StuMrg.iCount++;
printf("插入成功\n\n");
}
void Display()
{
if(g_StuMrg.iCount == 0)
{
printf("链表为空!\n");
return;
}
printf("学生信息展示如下:\n");
StudentInfo* tem = g_StuMrg.first;
while(tem)
{
printf("学生ID:%d,学生姓名: %s 学生分数:%f\n",tem->iNum,tem->acName,tem->fScore);
tem = tem->next;
}
printf("\n");
}
void Search(int iNum)
{
if(g_StuMrg.iCount == 0)
{
printf("链表为空\n\n");
return;
}
StudentInfo* tem = g_StuMrg.first;
while(tem)
{
if(tem->iNum == iNum)
break;
tem = tem->next;
}
if(tem)
printf("学生ID:%d,学生姓名: %s 学生分数:%f\n\n",tem->iNum,tem->acName,tem->fScore);
else
printf("学生不存在\n\n");
}
void Delete(int iNum)
{
if(g_StuMrg.iCount == 0)
{
printf("链表为空!\n\n");
return;
}
StudentInfo* tem1 = g_StuMrg.first;
StudentInfo* tem2 = g_StuMrg.first;
while(tem1)
{
if(tem1->iNum == iNum)
break;
tem2 = tem1;
tem1 = tem1->next;
}
if(tem1)
{
tem2->next = tem1->next;
printf("删除成功\n\n");
free(tem1);
g_StuMrg.iCount--;
}
else
printf("学生不存在\n\n");
}
void Free()
{
StudentInfo* tem1 = g_StuMrg.first;
StudentInfo* tem2 = g_StuMrg.first;
while(tem1)
{
tem2 = tem1;
tem1 = tem1->next;
free(tem2);
}
}
void main()
{
printf("**************成绩管理菜单***********\n");
Init();
while(true)
{
printf("请选择:1、插入;2、展示;3、查找;4、删除;0、退出\n\n");
int iS,iNum;
scanf("%d",&iS);
if(iS == 0)
break;
switch(iS)
{
case 1:
Create();
break;
case 2:
Display();
break;
case 3:
printf("输入要查找的学生ID\n");
scanf("%d",&iNum);
Search(iNum);
break;
case 4:
printf("输入要删除的学生ID\n");
scanf("%d",&iNum);
Delete(iNum);
break;
default:
break;
}
}
Free();
};
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct StudentInfo // 单个学生信息节点
{
int iNum; // 学号
char acName[20]; // name不能超过20个字符
float fScore; // 成绩
StudentInfo* next; // 下一个地址
};
struct StudentMgr // 学生信息管理类
{
int iCount; // 学生人数
StudentInfo* first; // 第一个学生地址
};
StudentMgr g_StuMrg; // 管理类全局管理对象
void Init(); // 初始化
void Create(); // 创建一个学生信息
void Display(); // 展示学生信息
void Search(int iNum); // 查找
void Delete(int iNum); // 删除
void Free(); // 内存清理
void Init()
{
g_StuMrg.iCount = 0;
g_StuMrg.first = NULL;
}
void Create()
{
int iA;
char acB[20];
float fC;
printf("请输入学生ID:\n");
scanf("%d",&iA);
printf("请输入学生name:\n");
scanf("%s",&acB);
printf("请输入学生成绩:\n");
scanf("%f",&fC);
StudentInfo* tem = g_StuMrg.first;
while(tem)
{
if(tem->iNum == iA)
{
printf("学生已经存在\n\n");
return;
}
tem = tem->next;
}
StudentInfo* newInfo = (StudentInfo*)malloc(sizeof(StudentInfo));
newInfo->iNum = iA;
strcpy(newInfo->acName,acB);
newInfo->fScore = fC;
newInfo->next = NULL;
if(g_StuMrg.iCount == 0)
g_StuMrg.first = newInfo;
else
{
StudentInfo* tem = g_StuMrg.first;
while(tem && tem->next)
tem = tem->next;
tem->next = newInfo;
}
g_StuMrg.iCount++;
printf("插入成功\n\n");
}
void Display()
{
if(g_StuMrg.iCount == 0)
{
printf("链表为空!\n");
return;
}
printf("学生信息展示如下:\n");
StudentInfo* tem = g_StuMrg.first;
while(tem)
{
printf("学生ID:%d,学生姓名: %s 学生分数:%f\n",tem->iNum,tem->acName,tem->fScore);
tem = tem->next;
}
printf("\n");
}
void Search(int iNum)
{
if(g_StuMrg.iCount == 0)
{
printf("链表为空\n\n");
return;
}
StudentInfo* tem = g_StuMrg.first;
while(tem)
{
if(tem->iNum == iNum)
break;
tem = tem->next;
}
if(tem)
printf("学生ID:%d,学生姓名: %s 学生分数:%f\n\n",tem->iNum,tem->acName,tem->fScore);
else
printf("学生不存在\n\n");
}
void Delete(int iNum)
{
if(g_StuMrg.iCount == 0)
{
printf("链表为空!\n\n");
return;
}
StudentInfo* tem1 = g_StuMrg.first;
StudentInfo* tem2 = g_StuMrg.first;
while(tem1)
{
if(tem1->iNum == iNum)
break;
tem2 = tem1;
tem1 = tem1->next;
}
if(tem1)
{
tem2->next = tem1->next;
printf("删除成功\n\n");
free(tem1);
g_StuMrg.iCount--;
}
else
printf("学生不存在\n\n");
}
void Free()
{
StudentInfo* tem1 = g_StuMrg.first;
StudentInfo* tem2 = g_StuMrg.first;
while(tem1)
{
tem2 = tem1;
tem1 = tem1->next;
free(tem2);
}
}
void main()
{
printf("**************成绩管理菜单***********\n");
Init();
while(true)
{
printf("请选择:1、插入;2、展示;3、查找;4、删除;0、退出\n\n");
int iS,iNum;
scanf("%d",&iS);
if(iS == 0)
break;
switch(iS)
{
case 1:
Create();
break;
case 2:
Display();
break;
case 3:
printf("输入要查找的学生ID\n");
scanf("%d",&iNum);
Search(iNum);
break;
case 4:
printf("输入要删除的学生ID\n");
scanf("%d",&iNum);
Delete(iNum);
break;
default:
break;
}
}
Free();
};
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |