| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 567 人关注过本帖
标题:一道 C语言题目 求改错, 谢谢~
只看楼主 加入收藏
ken2010aa
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
一道 C语言题目 求改错, 谢谢~
目的 是 输入 两组数 然后 合并 排序 自写的程序 如下 调试了 下 没错误 但是 就是运行不了
 求改错 THANKS ~
#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
    int data;
    struct Node *next;
}LinkList;

LinkList *CreatList()
{
    LinkList *L,*r,*s;
    L=(LinkList*)malloc(sizeof(LinkList));
    r=L;
    int x;
    scanf("%d",&x);
    while(x!=0)
    {
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
     r->next=NULL;
    return L;
}

LinkList *combine(LinkList *pa,LinkList*pb)
{
    LinkList *p,*q;
    p=pa->next;
    q=pb->next;
    while(p) p=p->next;
    p->next=q;
   return pa;
}

LinkList *order(LinkList *L)
{
  LinkList *a,*b,*c;
  a=L->next;
  b=a->next;
  while(a->next!=NULL)
  {
      while(b)
      {
       if(a->data<b->data)
       {
           c->data=a->data;
           a->data=b->data;
           b->data=c->data;
       }
       b=b->next;
      }
      a=a->next;
      b=a->next;
  }
  return L;
}

void printList(LinkList *p1)
{
    LinkList *p;
    p=p1->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}

void main()
{
    LinkList *LinA,*LinB,*LinC,*LinD;
    printf("请输入第一组数(以0为结束标志):");
    LinA=CreatList();
    printf("请输入第二组数(以0为结束标志):");
    LinB=CreatList();
    LinC=combine(LinA,LinB);
    LinD=order(LinC);
    printf("合并排序后数据为:\n");
    printList(LinD);

}



搜索更多相关主题的帖子: C语言 
2011-04-14 22:08
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
收藏
得分:1 
程序代码:
LinkList *CreatList()
{
    LinkList *L,*r,*s;
    L=(LinkList*)malloc(sizeof(LinkList));
    r=L;
    int x;
    scanf("%d",&x);
    while(x!=0)
    {
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=x;
        r->next=s;
        r=s;
        scanf("%d",&x);
    }
     r->next=NULL;
    return L;
}
这里面的while循环能结束吗?
2011-04-14 22:21
PぴㄒLaㄨMa
Rank: 1
等 级:新手上路
帖 子:18
专家分:5
注 册:2011-1-16
收藏
得分:1 
  你是大一的~??
2011-04-14 22:40
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
收藏
得分:2 
看到while中有scanf("%d",&x);了...
你这个代码太容易内存泄露了,随便输入几下就挂了
对内存操作特别要注意保护!
to 3搂:和我大几有什么关系?
2011-04-14 22:54
ken2010aa
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-22
收藏
得分:0 
我是大一滴 刚学 C 那 应该怎么改呢
2011-04-14 23:21
ych411521894
Rank: 2
等 级:论坛游民
帖 子:1
专家分:15
注 册:2011-4-15
收藏
得分:15 
如果这些代码是楼主全是自己编的话,其实楼主已经很厉害了!注意指针的使用方法和规则!楼主错误有三点:
一:
LinkList *combine(LinkList *pa,LinkList*pb)
{
    LinkList *p,*q;
    p=pa->next;
    q=pb->next;
     while(p) p=p->next;
    p->next=q;
   return pa;
}中 while(p) p=p->next;改为 while(p->next)p=p->next;这个就是链表插入的操作,需要是NEXT为空的前一个后面插入!
二:
LinkList *order(LinkList *L)
{
  LinkList *a,*b,*c;
  a=L->next;
  b=a->next;
  while(a->next!=NULL)
  {
      while(b)
      {
       if(a->data<b->data)
       {
           c->data=a->data;
           a->data=b->data;
           b->data=c->data;
       }
       b=b->next;
      }
      a=a->next;
      b=a->next;
  }
  return L;
}
   c->data=a->data;
      a->data=b->data;
       b->data=c->data;C->data用一个变量t代替就可以了,不需要变量!而且*C是个野指针,没有占内存空间的,也不能被赋值
三:还有个技术性错误,用malloc或者CALLOC的时候希望楼主养成释放空间的好习惯,void printList(LinkList *p1)
{
    LinkList *p,*t;
    p=p1->next;
    while(p)
    {
        printf("%d ",p->data);
        t=p;
        p=t->next;
        free(t);
    }
}因为每次都要申请空间,如果不释放就会永远占着,除非重新启动,不然如果你这个程序执行越多那么你占的内存就越多,越来越卡!
2011-04-15 09:00
w123012306
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:蜘蛛侠
威 望:4
帖 子:307
专家分:1180
注 册:2010-4-22
收藏
得分:1 
c还是那么注重!

楼上,楼下的一定要幸福开心哦!
2011-04-15 09:35
ken2010aa
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-22
收藏
得分:0 
谢谢 6楼的朋友解答、
2011-04-18 23:05
ken2010aa
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-3-22
收藏
得分:0 
回复 6楼 ych411521894
谢谢你的解答。
2011-04-18 23:06
快速回复:一道 C语言题目 求改错, 谢谢~
数据加载中...
 
   



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

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