鱼C论坛

 找回密码
 立即注册
查看: 3049|回复: 17

c程序问题求解!

[复制链接]
发表于 2013-12-8 15:57:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 rainymay 于 2013-12-8 16:57 编辑

#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
struct list {
   elemtype *list;
   int size;
   int maxsize;
};
void againmalloc(struct list *L)
{
    elemtype *p=realloc(L->list,(2*L->maxsize)*sizeof(elemtype));
    if(!p){
        printf("存储空间分配失败!");
        exit(1);
    }
    L->list=p;
    L->maxsize=2*L->maxsize;
}
void insertlastlist(struct list *L,elemtype x)
{
     if(L->size=L->maxsize){
        againmalloc(&L);
     }
     L->list[L->size]=x;
     L->size++;
     return;
}
void initlist(struct list *L,int ms)
{
   if (ms<=0){
      printf("maxsize非法!");
      exit(1);
   }
   L->maxsize=ms;
   L->size=0;
   L->list=(elemtype*)malloc(ms*sizeof(elemtype));
   if(!L->list){
    printf("空间分配失败!");
    exit(1);
   }
   return ;
}
void insertposlist(struct list *L,int pos,elemtype x)
{
     int i;
     if(pos<1||pos>L->size+1){
        return 0;
     }
     if(L->size==L->maxsize){
        againmalloc(&L);
     }
     for(i=L->size-1;i>=pos-1;i--){
        L->list[i+1]=L->list[i];

     }
     L->list[i]=x;
     L->size++;
     return ;
}
void MergeList(struct list *La, struct list *Lb)
{
    int j=0,i=0,m=0;
    La->list=(elemtype *)realloc(La->list,(La->maxsize+Lb->maxsize)*sizeof(elemtype));
    La->maxsize=La->maxsize+Lb->maxsize;
    for(i;i<La->size+Lb->size;i++){
        if(La->list[i]<Lb->list[j]){
            i++;
        }
        else if(La->list>=Lb->list[j]){
            insertposlist(La, i,Lb->list[j]);
            j++;
        }
    }
    for(m;m<=i;m++){
        printf("%d ",&La->list[m]);
     }
    return ;
}
void main()
{
    int i,k;
    int a[5]={0,2,4,6,8};
    int b[5]={1,3,5,7,9};
    struct list La;
    struct list Lb;
    initlist(&La,5);
    initlist(&Lb,5);
    for(k=0;k<5;k++){
        insertlastlist(&La,a[k]);
        insertlastlist(&Lb,b[k]);
    }
    MergeList(&La,&Lb);
    getchar();
    return 0;

}
显示内存分配失败,就大神解惑!

[/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-8 17:01:41 | 显示全部楼层

回帖奖励 +8 鱼币

下一次把字体写正,这样看着很别扭,而且看不清楚!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-8 17:49:51 | 显示全部楼层

回帖奖励 +8 鱼币

什么问题??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-8 19:36:13 | 显示全部楼层

回帖奖励 +8 鱼币

我不是来回答问题的...我有问题..我要提问。。。你的结构struct list {  elemtype *list;.......}的名字和成员的名字一样不会错吗..
还有void MergeList(struct list *La, struct list *Lb) 这个函数里 if(La->list<Lb->list[j])是在拿一个指针和一个整数比较吗...
然后...没有然后了..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-8 20:24:17 | 显示全部楼层

回帖奖励 +8 鱼币

这是解决什么问题的都不知道!就说解决问题?先把自己逻辑说清楚!看代码很累的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-8 20:43:23 | 显示全部楼层

最后说了,运行时显示内存空间分配失败,但我不知道错在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-8 20:48:37 | 显示全部楼层
悲哀 发表于 2013-12-8 19:36
我不是来回答问题的...我有问题..我要提问。。。你的结构struct list {  elemtype *list;.......}的名字和成 ...

结构体的设置不好,但没错吧,后面那个我代码里是a->list【i】,不知道复制上去怎么就没了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-8 20:49:40 | 显示全部楼层
maomingkun 发表于 2013-12-8 17:01
下一次把字体写正,这样看着很别扭,而且看不清楚!

下次我会注意的,那你能解答我的问题吗,为什么运行时显示内存分配错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-8 20:50:12 | 显示全部楼层
不正常人类 发表于 2013-12-8 17:49
什么问题??

运行时显示内存分配失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-8 21:07:09 | 显示全部楼层

回帖奖励 +8 鱼币

进入调试模式,自己一步一步调去吧,这样收获大。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-8 21:09:16 | 显示全部楼层

回帖奖励 +8 鱼币

屌丝路过···············
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-9 09:52:59 | 显示全部楼层
rainymay 发表于 2013-12-8 20:48
结构体的设置不好,但没错吧,后面那个我代码里是a->list【i】,不知道复制上去怎么就没了

把成员名称改改吧... 还有void againmalloc(struct list *L)函数里realloc函数都没有(int *)
void MergeList(struct list *La, struct list *Lb)函数里 for(i;i<La->size+Lb->size;i++) 的i++和if(La->list[i]<Lb->list[j]){ i++; } 造成i自加两次.. 是你的本意吗..
啊啊啊...编译都没通过...   这堆代码是要按大小插入数组吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-9 10:03:18 | 显示全部楼层

回帖奖励 +8 鱼币

楼主这代码好乱啦,代码里一堆的错误,思路又不清晰。不想看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-9 14:49:20 | 显示全部楼层

回帖奖励 +8 鱼币

尝试了下  失败了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-9 20:14:42 | 显示全部楼层

回帖奖励 +8 鱼币

顺序表插入排序问题,程序中有蛮多错误的,编译可以通过,运行报错。列下我发现的问题
1.insertlastlist函数中,   
if(L->size=L->maxsize)
{      
      againmalloc(&L);
}
判断条件有问题,还有againmalloc函数的参数有问题,直接用L就行,不用取址运算符
2. insertposlist函数中
     for(i=L->size-1;i>=pos-1;i--){
        L->list[i+1]=L->list;

     }
     L->list=x;
这里的L->list需改为L->list[i],后面也有同样的问题,要改一下
3.MergeList函数
for(i;i<La->size+Lb->size;i++){
        if(La->list<Lb->list[j]){
            i++;
        }
        else if(La->list>=Lb->list[j]){
            insertposlist(La, i,Lb->list[j]);
            j++;
        }
    }
中if语句中的i++需去掉,重复加了。同样,有上面说的问题。
    for(m;m<=i;m++){
        printf("%d ",&La->list[m]);
     }
printf语句中,把取址运算符去掉
还有 ,整个函数中逻辑不够严谨,应该加入边界的判定处理,当循环执行插入排序时,要是原先La->list或Lb->list指向的数据结构最后一个数据元素执行完了,需要怎么处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-9 21:19:09 | 显示全部楼层
北林之中 发表于 2013-12-9 20:14
顺序表插入排序问题,程序中有蛮多错误的,编译可以通过,运行报错。列下我发现的问题
1.insertlastlist函 ...

不好意思,我的代码没完善好久拿出来了,但我今天就边界问题修改了一下还是有问题,如果可以的话加一下qq,万分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-9 22:14:08 | 显示全部楼层
完全不知道在说什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-11 13:55:39 | 显示全部楼层
什么情况。。回复就有奖励!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 02:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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