鱼C论坛

 找回密码
 立即注册
查看: 3121|回复: 11

数据结构c语言编程问题

[复制链接]
发表于 2013-12-9 00:32:41 | 显示全部楼层 |阅读模式

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

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

x
//将线性表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[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->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[i+1]=L->elem[i];

     }
     L->elem[i]=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[i++]=Lb->elem[j];
            }
            break;
        }
        if(La->elem>=Lb->elem[j]){
            insertposlist(La,i+1,Lb->elem[j]);
            j++;
        }
    }
  //  打印La中的元素
    for(m;m<La->size;m++){
        printf("%d ",La->elem[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();
}
[/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

楼主的MergeList函数的算法我表示看不懂,不知道这个函数到底是在那干嘛,这个程序哪里有错误。楼主能不能说说。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[LbNum] <= La->elem[i])  //找到,跳出循环
                        {
                                break;
                        }
                        ++flag;
                        
                }

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

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

    return ;
}
在楼主的基础上改进,程序基本能够实现楼主功能。代码仅供参考
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-14 21:13:33 | 显示全部楼层

回帖奖励 +10 鱼币

合并的方法再加点注释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-15 21:40:53 | 显示全部楼层

回帖奖励 +10 鱼币

先看看再说。。。。嗯。。。还是先拿奖励再说吧。。。。:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-26 10:45:01 | 显示全部楼层
先帮你顶一顶,不然沉了怎么办。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-12-26 11:54:53 | 显示全部楼层

回帖奖励 +10 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-26 21:48:57 | 显示全部楼层

回帖奖励 +10 鱼币

等下,我细细找找
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-27 12:29:34 | 显示全部楼层

回帖奖励 +10 鱼币

:titter:   全部是代码!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-27 13:00:01 | 显示全部楼层

回帖奖励 +10 鱼币

代码太乱了。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-27 13:35:05 | 显示全部楼层

回帖奖励 +10 鱼币

我只是看看  正在学小甲鱼的数据结构与算法  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-27 17:51:09 From FishC Mobile | 显示全部楼层

回帖奖励 +10 鱼币

完全不知所云
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 19:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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