鱼C论坛

 找回密码
 立即注册
查看: 3453|回复: 4

[技术交流] 交作业:写了个简单的链表,大家看看有没有需要改进的!

[复制链接]
发表于 2011-10-29 23:02:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
学到小甲鱼老师讲链表的课程,根据小甲鱼老师55课的作业改变了一下,虽然代码写出来了,也能正常运行,但还是感觉稀里糊涂的,大家看看哪些地方还需要改进的,代码如下:
===============================================================
  1. // 根据输入的学生个数,保存每个学生的学号和成绩
  2. #include<stdio.h>
  3. #include<malloc.h>
  4. #include<stdlib.h>

  5. typedef struct student                // 创建结构体
  6. {
  7.         int num;                                // 学号
  8.         float sorce;                        // 分数
  9.         struct student *pNext;        // 指针域
  10. }NODE, *pNODE;

  11. // 函数声明
  12. pNODE create(void);                        // 功能:创建链表
  13. void print(pNODE pHead);        // 功能:遍历链表并打印

  14. int main()
  15. {
  16.         pNODE pHead = NULL;                // 链表头

  17.         pHead = create();
  18.         print(pHead);

  19.         return 0;
  20. }
  21. pNODE create(void)
  22. {
  23.         int len;                                // 输入学生个数
  24.         int i;
  25.         int t_num;                                // 临时保存学号
  26.         float t_sorce;                        // 临时保存分数
  27.         pNODE pNew = NULL;                // 新链表节点

  28.         pNODE pHead = (pNODE) malloc(sizeof(NODE));                // 作为返回值
  29.         pNODE p = pHead;                                // 临时指针变量(永远指向下一个节点)
  30.         p->pNext = NULL;                                // 清空指针域

  31.         if (NULL == pHead)                                // 检测判断
  32.         {
  33.                 printf("内存分配失败,程序终止!\n");
  34.                 exit(-1);
  35.         }
  36.         printf("请输入学生的总数:\n");
  37.         scanf("%d", &len);
  38.         for (i=0; i<len; ++i)
  39.         {
  40.                 printf("请输入第%d个同学的学号和成绩:(学号和成绩用逗号分隔)\n", i+1);
  41.                 scanf("%d,%f", &t_num, &t_sorce);
  42.                 pNew = (pNODE) malloc(sizeof(NODE));                // 开辟新节点       
  43.                 if (NULL == pNew)                                                        // 检测判断
  44.                 {
  45.                         printf("内存分配失败,程序终止!\n");
  46.                         exit(-1);
  47.                 }
  48.                 pNew->num = t_num;                        // 传入学号
  49.                 pNew->sorce = t_sorce;                // 传入分数
  50.                 p->pNext = pNew;                        // 保存节点指针
  51.                 pNew->pNext = NULL;                        // 清空指针域
  52.                 p = pNew;                                        // 指向节点
  53.         }

  54.         return pHead;
  55. }
  56. void print(pNODE pHead)
  57. {
  58.         int n = 1;                                                // 学生个数计数
  59.         pNODE p = pHead->pNext;                        // 临时指针变量指向下一个节点
  60.         while (NULL != p)
  61.         {
  62.                 printf("第%d个同学的学号:%5d  成绩:%5f\n", n, p->num, p->sorce);
  63.                 p = p->pNext;                                // 指向下一个节点
  64.                 n++;
  65.         }
  66.         return;
  67. }
  68. /*
  69. ==========================================================
  70.         本代码这Microsoft Visual Studio 6.0 能正常编译连接
  71. ==========================================================
  72. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-29 23:07:17 | 显示全部楼层
有malloc没有free,所以内存泄漏
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-2 10:28:04 | 显示全部楼层
好好学习  天天向上
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2014-7-6 08:59:47 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-7 17:57:05 | 显示全部楼层
2楼正解,内存泄漏问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表