数据结构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();
}
楼主的MergeList函数的算法我表示看不懂,不知道这个函数到底是在那干嘛,这个程序哪里有错误。楼主能不能说说。 //将线性表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 ;
}在楼主的基础上改进,程序基本能够实现楼主功能。代码仅供参考 合并的方法再加点注释 先看看再说。。。。嗯。。。还是先拿奖励再说吧。。。。:lol: 先帮你顶一顶,不然沉了怎么办。。。。 等下,我细细找找 :titter: 全部是代码!!!!!!!!! 代码太乱了。。。。。 我只是看看正在学小甲鱼的数据结构与算法 完全不知所云
页:
[1]