马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
学到小甲鱼老师讲链表的课程,根据小甲鱼老师55课的作业改变了一下,虽然代码写出来了,也能正常运行,但还是感觉稀里糊涂的,大家看看哪些地方还需要改进的,代码如下:
===============================================================// 根据输入的学生个数,保存每个学生的学号和成绩
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct student // 创建结构体
{
int num; // 学号
float sorce; // 分数
struct student *pNext; // 指针域
}NODE, *pNODE;
// 函数声明
pNODE create(void); // 功能:创建链表
void print(pNODE pHead); // 功能:遍历链表并打印
int main()
{
pNODE pHead = NULL; // 链表头
pHead = create();
print(pHead);
return 0;
}
pNODE create(void)
{
int len; // 输入学生个数
int i;
int t_num; // 临时保存学号
float t_sorce; // 临时保存分数
pNODE pNew = NULL; // 新链表节点
pNODE pHead = (pNODE) malloc(sizeof(NODE)); // 作为返回值
pNODE p = pHead; // 临时指针变量(永远指向下一个节点)
p->pNext = NULL; // 清空指针域
if (NULL == pHead) // 检测判断
{
printf("内存分配失败,程序终止!\n");
exit(-1);
}
printf("请输入学生的总数:\n");
scanf("%d", &len);
for (i=0; i<len; ++i)
{
printf("请输入第%d个同学的学号和成绩:(学号和成绩用逗号分隔)\n", i+1);
scanf("%d,%f", &t_num, &t_sorce);
pNew = (pNODE) malloc(sizeof(NODE)); // 开辟新节点
if (NULL == pNew) // 检测判断
{
printf("内存分配失败,程序终止!\n");
exit(-1);
}
pNew->num = t_num; // 传入学号
pNew->sorce = t_sorce; // 传入分数
p->pNext = pNew; // 保存节点指针
pNew->pNext = NULL; // 清空指针域
p = pNew; // 指向节点
}
return pHead;
}
void print(pNODE pHead)
{
int n = 1; // 学生个数计数
pNODE p = pHead->pNext; // 临时指针变量指向下一个节点
while (NULL != p)
{
printf("第%d个同学的学号:%5d 成绩:%5f\n", n, p->num, p->sorce);
p = p->pNext; // 指向下一个节点
n++;
}
return;
}
/*
==========================================================
本代码这Microsoft Visual Studio 6.0 能正常编译连接
==========================================================
*/
|