| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 525 人关注过本帖
标题:关于双向链表的错误
只看楼主 加入收藏
mwebc
Rank: 2
等 级:论坛游民
帖 子:9
专家分:13
注 册:2010-7-21
结帖率:100%
收藏
已结贴  问题点数:3 回复次数:5 
关于双向链表的错误
程序代码:
#include<stdio.h>
#include<malloc.h>
typedef struct life
{
    int date;
    struct life *qian,*hou;
}LIFEO;
LIFEO * jianlilianbiao(LIFEO *KK,int n)
{
    KK=(LIFEO *)malloc(sizeof(LIFEO));
    KK->qian=NULL;
    KK->hou=NULL;
    LIFEO *p0=KK,*p;
    if(p0==NULL)
    printf("内存分配错误");
    int t;
    for(t=0;t<n;t++)
    {
        p=(LIFEO *)malloc(sizeof(LIFEO));
        printf("输入数据");
    scanf("%d",&p->date);
     p->qian=p0;
     p0->hou=p;
     p0=p;
     printf("%d\n",p0->date);
    }
    p0->hou=NULL;
    return KK;
}
void DisplayDList(LIFEO *L){

 LIFEO *p=L->hou;

 while(p!=NULL ){
  printf("%d\n",p->date);
  p=p->hou ;

 }
}
int main()
{
LIFEO *ttt;

    jianlilianbiao(ttt,5);
    DisplayDList(ttt);
}

编译通过
到最后就弹出错误……
搜索更多相关主题的帖子: 链表 
2010-08-24 20:32
S_12s
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:110
专家分:670
注 册:2010-7-21
收藏
得分:3 
以下的代码在VC下运行很好:
程序代码:
#include<stdio.h>
#include<malloc.h>


typedef struct life
{
    int date;
    struct life *qian,*hou;
}LIFEO;


LIFEO * jianlilianbiao(LIFEO *KK,int n)
{
    LIFEO *p0=KK,*p;
    int t;
    if(p0==NULL)
        printf("内存分配错误!;");
    for(t=0;t<n;t++)
    {
        p=(LIFEO *)malloc(sizeof(LIFEO));
        printf("请输入数据;\n");
        scanf("%d",&p->date);
        p->qian=p0;
        p0->hou=p;
        p0=p;
        printf("%d\n",p0->date);
    }
    p0->hou=NULL;
    return KK;
}


void DisplayDList(LIFEO *L)
{
    LIFEO *p=L->hou;
    while(p!=NULL )
    {
      printf("%d\n",p->date);
      p=p->hou ;
    }
}


int main()
{
    LIFEO *ttt;
    ttt=(LIFEO *)malloc(sizeof(LIFEO));
    ttt->qian=NULL;
    ttt->hou=NULL;
    jianlilianbiao(ttt,5);
    DisplayDList(ttt);
}



[ 本帖最后由 S_12s 于 2010-8-24 21:32 编辑 ]
2010-08-24 21:29
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

typedef struct life
{
    int date;
    struct life *qian,*hou;
}LIFEO;

LIFEO * jianlilianbiao(LIFEO *KK,int n)
{
    int t;
    LIFEO *p0=NULL,*p = NULL;
    KK=(LIFEO *)malloc(sizeof(LIFEO));
    if(NULL == KK)
    {
        printf("ERROR:In jianilianbao,NULL==KK!\n");
        return NULL;
    }
   
    KK->qian=NULL;
    KK->hou=NULL;

    p0 = KK;
     for(t=0;t<n;t++)
     {
        p=(LIFEO *)malloc(sizeof(LIFEO));
      if(NULL == p)
      {
        printf("Error:NULL==p!\n");
        return NULL;
      }
        printf("输入数据:\n");
          scanf("%d",&p->date);
        p->qian=p0;
        p0->hou=p;
        p0=p;
        
        printf("%d\n",p0->date);
    }
     
    p0->hou=NULL;
   
    return KK;
}

void DisplayDList(LIFEO *L)
{
    LIFEO *p=L->hou;
      while(p!=NULL )
    {
          printf("%d\n",p->date);
          p=p->hou ;
    }
}

int main()
{
       LIFEO *ttt = NULL;

       ttt = jianlilianbiao(ttt,5);            //返回值,不然ttt的值不会从子函数返回到主函数
       if(NULL == ttt)
          return -1;
       printf("after created!\n");
       DisplayDList(ttt);

     return 0;
}
2010-08-24 22:26
yaobihuai
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-23
收藏
得分:0 
我运行了一下提示是不能打开头文件“malloc.h”
2010-08-24 22:34
yaobihuai
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-8-23
收藏
得分:0 
三楼的  把头文件改了  就对了  运行他的成功了
2010-08-24 22:38
jy_lance
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2010-8-23
收藏
得分:0 
我是这么修改的:
#include<stdio.h>
#include<stdlib.h>
typedef struct life
{
    int date;
    struct life *qian,*hou;
}LIFEO;
LIFEO * jianlilianbiao(LIFEO *KK,int n)
{
    KK=(LIFEO *)malloc(sizeof(LIFEO));
    KK->qian=NULL;
    KK->hou=NULL;
    LIFEO *p0=KK,*p;
    if(p0==NULL)
    printf("内存分配错误");
    int t;
    for(t=0;t<n;t++)
    {
        p=(LIFEO *)malloc(sizeof(LIFEO));
        printf("输入数据");
    scanf("%d",&p->date);
     p->qian=p0;
     p0->hou=p;
     p0=p;
     printf("%d\n",p0->date);
    }
    p0->hou=NULL;
    return KK;
}
void DisplayDList(LIFEO *L){
LIFEO *p=L->hou;
while(p!=NULL ){
  printf("%d\n",p->date);
  p=p->hou ;
}
}
int main()
{
LIFEO *ttt,*k;

   k=jianlilianbiao(ttt,5);
    DisplayDList(k);
    return 0;
}
错误的原因是函数的参数的传递时值传递,被调用的函数不会改变实参原有的值。在这个程序中就是jianlilianbiao(ttt,5);并不改变mian函数中定义的变量ttt的值,只能通过函数的返回值来进行值传递。当然还有另一种解决的方法就是定义ttt的指针的指针来改变ttt的值。
还有头文件的错误是包含动态存储分配函数malloc的头文件是stdlib.h,所以只要将头文件改为#include<stdlib.h>就行了。
2010-08-24 23:30
快速回复:关于双向链表的错误
数据加载中...
 
   



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

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