- 论坛徽章:
- 0
|
#include <stdio.h>
#include <stdlib.h>
#define list_init_size 100 //初始化空间大小。。。
typedef struct
{
int * elem ; //存储线性表的基地址。。。。
int length; //线性表元素的个数。。。。
int listsize ; //初始化空间大小。。。
} sqlist ;
int listinit(sqlist *a,sqlist *b) //新键 a表。。。。和。。。。b表。。。。
{
a->elem=(int *)malloc(list_init_size*sizeof(int )) ; //对a表进行开空间。,,,
if(a->elem==NULL) //判断。。。。如果没有开成功。。就。。。。
return 0 ;
a->length=NULL; //使表长为 0
a->listsize=list_init_size; //分配初始化大小。。。。
b->elem=(int *)malloc(list_init_size*sizeof(int )); //对b表进行开空间。,,,
if(b->elem==NULL) //判断。。。。如果没有开成功。。就。。。。
return 0 ;
b->length=NULL; //使表长为 0
b->listsize=list_init_size; //分配初始化大小。。。。
return 1 ;
}
int mergelist(sqlist *a,sqlist *b,sqlist *c) // ...对a....b,,,,2个线性表进行合并。。。。
{
c->elem=(int *)malloc(list_init_size*sizeof(int )) ; //对c线性开空间。。。。。
if(c->elem==NULL) //判断。。。。如果没有开成功。。就。。。。
return 0 ;
c->length=a->length+b->length; //c空间的元素个数的长度等于。。a空间的元素个数的长度+b空间的元素个数的长度。。。
c->listsize=a->listsize+b->listsize; //c空间的长度等于。。a空间的长度+b空间的长度。。。
int *la,*lb; //定义 la,lb 两个指针。用于找到,,a表和b表的末位置。。
int i;
la=a->elem+a->length-1; // a 表的末位置给la...
lb=b->elem+b->length-1; //b表的末位置给lb..
while(a->elem<=la && b->elem<=lb) //进行2个表的合并。。。。
if(a->elem<=b->elem) //如果a表元素小于b表的元素。。。就把a表的一个元素放到c表中。。
{
*(c->elem++)=*(a->elem++);
}
else
{*(c->elem++)=*(b->elem++);
}
while(a->elem <= la) //把没有放完的继续放进去。。。
*(c->elem++)=*(a->elem++);
while(b->elem<=lb)
*(c->elem++)=*(b->elem++);
return 1;
}
main()
{
sqlist l,m,n;
int i,j,k;
listinit(&l,&m);
for(i=0;i<10;i++) //输入10个元素放入a表。。。
{
scanf("%d",&l.elem[i]);
l.length++; //每循环一次。。。长度加1。。。
}
for(j=0;j<10;j++) //输入10个元素放入b表。。。
{
scanf("%d",&m.elem[j]);
m.length++; //每循环一次。。。长度加1。。。
}
mergelist(&l,&m,&n);
for(k=0;k<=n.length-1;k++) //输出合并的的元素。。
printf("%d",n.elem[k]);
return 1;
}
编译没有错哦。。。算法错了。。帮忙哦。。。。!!~~
两个线性表的合并。。。 |
|