| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1339 人关注过本帖
标题:创建链表和输出链表 怎么就不对呢
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:5 
创建链表和输出链表 怎么就不对呢
程序代码:
#include <stdio.h>
#include <malloc.h>

struct date
{
    unsigned int month;
    unsigned int day;
    unsigned int year;
    struct date* next;
};


int main(int argc, char* argv[])
{
    struct date* head;
    struct date* p;
    p=(struct date*)malloc(sizeof(struct date));
    p->next=NULL;
    head=p;
    int i;
    for(i=0;i<3;i++)
    {
        p=(struct date*)malloc(sizeof(struct date));
        scanf("%u%u%u",&p->month,&p->day,&p->year);
        p->next=NULL;
    }
    p=head;
    while(p!=NULL)
    {
        printf("%4u%2u%2u\n",p->year,p->month,p->day);
        p=p->next;
    }
    free(p);
    return 0;
}


抛开资料 自己默写 就写不对  不知道差在哪里
2017-03-16 18:18
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:25 
新的节点没有连接起来,  释放节点要一个一个来
程序代码:
#include <stdio.h>
#include <malloc.h>

struct date
{
    unsigned int month;
    unsigned int day;
    unsigned int year;
    struct date* next;
};


int main(int argc, char* argv[])
{
    struct date* head;
    struct date* p, *p1;
    head=(struct date*)malloc(sizeof(struct date));
    //p->next=NULL;
    //p = head;
    p1=head;      //p1一直指向当前最后一个节点
    int i;
    for(i=0;i<3;i++)    //p节点接在当前最后一个节点后面。头节点head的数据域为空(也可以不这样) 
    {
        p=(struct date*)malloc(sizeof(struct date));
        scanf("%u%u%u",&p->month,&p->day,&p->year);
        p->next=NULL;
        p1->next=p;        //新的节点接在当前最后一个节点的后面 
        p1=p;               //p1一直指向最后一个节点 
    }
    p=head->next;   //head节点数据域为空 
    while(p!=NULL)
    {
        p1=p;
        printf("%4u%2u%2u\n",p->year,p->month,p->day);
        p=p->next;
        free(p1);      //输出一个,释放一个 
    }
    //free(p);
    free(head);
    return 0;
}


[此贴子已经被作者于2017-3-16 19:14编辑过]


早知做人那么辛苦!  当初不应该下凡
2017-03-16 19:10
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:25 
回复 楼主 wp231957
老版主,好久不见呀!

看第一个 for,每次分配的地址都把上一次分配的给替换了,上一次的地址丢失了,内存泄漏了~


莫问前尘有愧,但求今生无悔
2017-03-16 19:33
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:25 
程序代码:
   for(i=0;i<3;i++)
    {
        p=(struct date*)malloc(sizeof(struct date));
        scanf("%u%u%u",&p->month,&p->day,&p->year);
        p->next=NULL;
    }


每次p都指向一个新的节点~链表指针没有链接~正常来说链表创建需要两个指针~一个做前驱~另一个负责链接前驱节点~看看网上资料应该有很多关于这方面的内容的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-16 19:46
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:25 
#include <stdio.h>
#include <malloc.h>

struct date
{
    unsigned int month;
    unsigned int day;
    unsigned int year;
    struct date* next;
};


int main(int argc, char* argv[])
{
    struct date* head = NULL;
    struct date* p = head;
    for(int i=0;i<3;i++)
    {
        p=(struct date*)malloc(sizeof(struct date));
        scanf("%u%u%u",&p->month,&p->day,&p->year);
        p->next = head;
        head = p;
    }
    while(p!=NULL)
    {
        printf("%4u%2u%2u\n",p->year,p->month,p->day);
        struct date* pTmp = p;
        p = p->next;
        free(pTmp);
    }
    //你释放错了free(p)p = NULL;就算P不为空你也只是释放了一个空间而已,并没有释放掉所有申请空间
    return 0;
}
2017-03-16 20:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
隐隐约约知道怎么回事了  谢谢各位的回复  

DO IT YOURSELF !
2017-03-16 22:10
快速回复:创建链表和输出链表 怎么就不对呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014877 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved