c程序问题求解!
本帖最后由 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=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=L->list;
}
L->list=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<Lb->list){
i++;
}
else if(La->list>=Lb->list){
insertposlist(La, i,Lb->list);
j++;
}
}
for(m;m<=i;m++){
printf("%d ",&La->list);
}
return ;
}
void main()
{
int i,k;
int a={0,2,4,6,8};
int b={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);
insertlastlist(&Lb,b);
}
MergeList(&La,&Lb);
getchar();
return 0;
}
显示内存分配失败,就大神解惑!
下一次把字体写正,这样看着很别扭,而且看不清楚! 什么问题?? 我不是来回答问题的...我有问题..我要提问。。。你的结构struct list {elemtype *list;.......}的名字和成员的名字一样不会错吗..
还有void MergeList(struct list *La, struct list *Lb) 这个函数里 if(La->list<Lb->list)是在拿一个指针和一个整数比较吗...
然后...没有然后了.. 这是解决什么问题的都不知道!就说解决问题?先把自己逻辑说清楚!看代码很累的! Sheamus 发表于 2013-12-8 20:24 static/image/common/back.gif
这是解决什么问题的都不知道!就说解决问题?先把自己逻辑说清楚!看代码很累的!
最后说了,运行时显示内存空间分配失败,但我不知道错在哪 悲哀 发表于 2013-12-8 19:36 static/image/common/back.gif
我不是来回答问题的...我有问题..我要提问。。。你的结构struct list {elemtype *list;.......}的名字和成 ...
结构体的设置不好,但没错吧,后面那个我代码里是a->list【i】,不知道复制上去怎么就没了 maomingkun 发表于 2013-12-8 17:01 static/image/common/back.gif
下一次把字体写正,这样看着很别扭,而且看不清楚!
下次我会注意的,那你能解答我的问题吗,为什么运行时显示内存分配错误 不正常人类 发表于 2013-12-8 17:49 static/image/common/back.gif
什么问题??
运行时显示内存分配失败 进入调试模式,自己一步一步调去吧,这样收获大。 屌丝路过··············· rainymay 发表于 2013-12-8 20:48 static/image/common/back.gif
结构体的设置不好,但没错吧,后面那个我代码里是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<Lb->list){ i++; } 造成i自加两次.. 是你的本意吗..
啊啊啊...编译都没通过... 这堆代码是要按大小插入数组吗?? 楼主这代码好乱啦,代码里一堆的错误,思路又不清晰。不想看了 尝试了下失败了... 顺序表插入排序问题,程序中有蛮多错误的,编译可以通过,运行报错。列下我发现的问题
1.insertlastlist函数中,
if(L->size=L->maxsize)
{
againmalloc(&L);
}
判断条件有问题,还有againmalloc函数的参数有问题,直接用L就行,不用取址运算符
2. insertposlist函数中
for(i=L->size-1;i>=pos-1;i--){
L->list=L->list;
}
L->list=x;
这里的L->list需改为L->list,后面也有同样的问题,要改一下
3.MergeList函数
for(i;i<La->size+Lb->size;i++){
if(La->list<Lb->list){
i++;
}
else if(La->list>=Lb->list){
insertposlist(La, i,Lb->list);
j++;
}
}
中if语句中的i++需去掉,重复加了。同样,有上面说的问题。
for(m;m<=i;m++){
printf("%d ",&La->list);
}
printf语句中,把取址运算符去掉
还有 ,整个函数中逻辑不够严谨,应该加入边界的判定处理,当循环执行插入排序时,要是原先La->list或Lb->list指向的数据结构最后一个数据元素执行完了,需要怎么处理。 北林之中 发表于 2013-12-9 20:14 static/image/common/back.gif
顺序表插入排序问题,程序中有蛮多错误的,编译可以通过,运行报错。列下我发现的问题
1.insertlastlist函 ...
不好意思,我的代码没完善好久拿出来了,但我今天就边界问题修改了一下还是有问题,如果可以的话加一下qq,万分感谢! 完全不知道在说什么 什么情况。。回复就有奖励!!!!!!!!!!!
页:
[1]