鱼C论坛

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

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

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

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

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

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 能正常编译连接
==========================================================
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-29 23:07:17 | 显示全部楼层
有malloc没有free,所以内存泄漏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-2 10:28:04 | 显示全部楼层
好好学习  天天向上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-7-6 08:59:47 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-7 17:57:05 | 显示全部楼层
2楼正解,内存泄漏问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 14:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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