gongheng 发表于 2011-10-29 23:02:11

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

学到小甲鱼老师讲链表的课程,根据小甲鱼老师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 能正常编译连接
==========================================================
*/

仰望天上的光 发表于 2011-10-29 23:07:17

有malloc没有free,所以内存泄漏

jackfong 发表于 2011-11-2 10:28:04

好好学习天天向上

拈花小仙 发表于 2014-7-6 08:59:47

http://bbs.fishc.com/group-264-1.html

hfut_wangfei 发表于 2014-7-7 17:57:05

2楼正解,内存泄漏问题
页: [1]
查看完整版本: 交作业:写了个简单的链表,大家看看有没有需要改进的!