实现顺序表的基本操作,编写将两个顺序表合并的算法或程序

如题所述

我做的,交作业完全没问题,不过做好还是自己写:
#include <stdio.h>
#include <stdlib.h>
#define list_init_size 100
typedef struct
{ int *elem;
int length;
int listsize;
} sqlist;
int initlist(sqlist *l)
{
l->elem=(int *)malloc(list_init_size*sizeof(int));
if(!l->elem)
exit(0);
l->length=0;
l->listsize=list_init_size;
return l;
}
void mergelist_sq(sqlist la,sqlist lb,sqlist lc)
{
int *pa,*pb,*pc,*pa_last,*pb_last,i;
pa=la.elem;
pb=lb.elem;
lc.length=la.length+lb.length;
lc.listsize=lc.length;
pc=lc.elem=(int *)malloc(lc.listsize*sizeof(int));
if(!lc.elem)
exit(0);
pa_last=la.elem+la.length-1;
pb_last=lb.elem+lb.length-1;
while(pa<=pa_last&&pb<=pb_last)
{
if(*pa<*pb)
*pc++=*pa++;
else *pc++=*pb++;
}
while(pa<=pa_last)
*pc++=*pa++;
while(pb<=pb_last)
*pc++=*pb++;
for(i=0;i<lc.length;i++)
printf("%d ",lc.elem[i]);
printf("\n");
}
int sortlist(sqlist *l)
{
int i,j,k;
for(j=0;j<l->length-1;j++) //冒泡排序
for(i=0;i<l->length-1-j;i++)
if(l->elem[i]>l->elem[i+1])
{
k=l->elem[i];
l->elem[i]=l->elem[i+1];
l->elem[i+1]=k;
}
return l;
}
int main()
{
sqlist la,lb,lc;
int i;
if(initlist(&la))
{
printf("输入顺序表la:\n");
for(i=0;i<5;i++)
{
scanf("%d",&la.elem[i]);
la.length++;
}
sortlist(&la);
}
if(initlist(&lb))
{
printf("输入顺序表lb:\n");
for(i=0;i<5;i++)
{
scanf("%d",&lb.elem[i]);
lb.length++;
}
sortlist(&lb);
}

mergelist_sq(la,lb,lc);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-15
将A表中元素依次拿出,每拿出一个元素,将它插入到B表结尾并进行排序,直到将所有A表中所有元素都拿出完为止追问

详细一点

追答

更正一下:将A表中元素依次拿出,每拿出一个元素,将它插入到B表结尾,直到将所有A表中所有元素都拿出完为止。最后进行排序。
以数组a[1000],b[1000]为例,设a中有m个元素,b中游n个元素。
for(i=0,ib[j])//我假设是从小到大排,如果是从大到小排则是a[i]<a[j]
{
t=b[i];b[i]=b[j];b[j]=t;
}

追问

我要当作业教的
这如何教
拜托大哥详细再详细

相似回答