rainymay 发表于 2013-12-9 00:32:41

数据结构c语言编程问题

//将线性表Lb中元素插入到La中,使得La中元素自小到大


请问我下面写的代码错在哪了?????

#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
struct list {
   elemtype *elem;
   int size;
   int maxsize;
};
void againmalloc(struct list *L)
{
    elemtype *p=realloc(L->elem,(2*L->maxsize)*sizeof(elemtype));
    if(!p){
      printf("存储空间分配失败!");
      exit(1);
    }
    L->elem=p;
    L->maxsize=2*L->maxsize;
}
//将2个线性表中的整型指针内赋初值
void insertlastlist(struct list *L,elemtype x)
{
   if(L->size==L->maxsize){
      againmalloc(L);
   }
   L->elem=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->elem=(elemtype*)malloc(ms*sizeof(elemtype));
   if(!L->elem){
    printf("空间分配失败!");
    exit(1);
   }
   return ;
}

void insertposlist(struct list *L,int pos,elemtype x)
{
   int i;
   if(pos<1||pos>L->size+1){
      printf("插入点错误");
      return ;
   }
   if(L->size==L->maxsize){
      againmalloc(L);
   }
   for(i=L->size-1;i>=pos-1;i--){
      L->elem=L->elem;

   }
   L->elem=x;
   L->size++;
   return ;
}
//将线性表Lb中元素插入到La中,使得La中元素从小到大
void MergeList(struct list *La, struct list *Lb)
{
    int j=0,i=0,m=0,n;
    La->elem=(elemtype *)realloc(La->elem,(La->maxsize+Lb->maxsize)*sizeof(elemtype));
    La->maxsize=La->maxsize+Lb->maxsize;
    n=La->size;
    La->size=La->size+Lb->size;
    for(i;i<La->size;i++){
      if(i==n+j){
            for(j;j<Lb->size;j++){
                La->elem=Lb->elem;
            }
            break;
      }
      if(La->elem>=Lb->elem){
            insertposlist(La,i+1,Lb->elem);
            j++;
      }
    }
//打印La中的元素
    for(m;m<La->size;m++){
      printf("%d ",La->elem);
   }
    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();
}

小亮1201 发表于 2013-12-9 10:36:59

楼主的MergeList函数的算法我表示看不懂,不知道这个函数到底是在那干嘛,这个程序哪里有错误。楼主能不能说说。

小亮1201 发表于 2013-12-9 11:20:57

//将线性表Lb中元素插入到La中,使得La中元素从小到大
void MergeList(struct list *La, struct list *Lb)
{
    //int j=0,i=0,m=0,n;
    La->elem=(elemtype *)realloc(La->elem,(La->maxsize+Lb->maxsize)*sizeof(elemtype));
        //int LaNum = La->size-1;
        int flag = 0;//插入位置标记
        int LbNum = Lb->size-1;//插入数据个数
    La->maxsize=La->maxsize+Lb->maxsize;
       
        while (LbNum>=0)
        {
                flag = 0;//初始化
                for (int i=0; i<La->size; ++i)//寻找插入位置
                {
                        if (Lb->elem <= La->elem)//找到,跳出循环
                        {
                                break;
                        }
                        ++flag;
                       
                }

                for (int j=La->size; j>=flag; --j)//插入位置后的数据后移
                {
                        La->elem = La->elem;
                }
                La->elem = Lb->elem; //将数据插入到对应位置
                --LbNum;//插入数据个数递减
                ++La->size; //线性表个数加1
        }

        for (int i=0; i<La->size; ++i)//打印排序后的线性表
        {
                printf("%4d", La->elem);
        }
    //n=La->size;
    //La->size=La->size+Lb->size;
        /* for(i;i<La->size;i++){
        if(i==n+j){
        for(j;j<Lb->size;j++){
        La->elem=Lb->elem;
        }
        break;
        }
        if(La->elem>=Lb->elem){
        insertposlist(La,i+1,Lb->elem);
        j++;
        }
    }
        //打印La中的元素
    for(m;m<La->size;m++){
        printf("%d ",La->elem);
}*/
       

    return ;
}在楼主的基础上改进,程序基本能够实现楼主功能。代码仅供参考

hate茶叶蛋 发表于 2013-12-14 21:13:33

合并的方法再加点注释

musilintan 发表于 2013-12-15 21:40:53

先看看再说。。。。嗯。。。还是先拿奖励再说吧。。。。:lol:

musilintan 发表于 2013-12-26 10:45:01

先帮你顶一顶,不然沉了怎么办。。。。

suweixiao 发表于 2013-12-26 11:54:53

神释 发表于 2013-12-26 21:48:57

等下,我细细找找

艹樱散丿小羽 发表于 2013-12-27 12:29:34

:titter:   全部是代码!!!!!!!!!

scottly 发表于 2013-12-27 13:00:01

代码太乱了。。。。。

Dokgo.小浪_ 发表于 2013-12-27 13:35:05

我只是看看正在学小甲鱼的数据结构与算法

星辰绞杀 发表于 2013-12-27 17:51:09

完全不知所云
页: [1]
查看完整版本: 数据结构c语言编程问题