顺序表应用5:有序顺序表归并

来源:互联网 发布:哈利波特英文版 知乎 编辑:程序博客网 时间:2024/05/21 17:05

以上为题目。

归并和链表的归并相通,可相互印证理解、

下面为代码:

#include <stdio.h>#include <stdlib.h>#define List_init_size 10000typedef int Element;typedef struct{    Element *elem;    int length;    int listsize;}Sqlist;int Initlist(Sqlist *L)//一如既往的初始化初始化顺序表{    L->elem=(Element *)malloc(List_init_size*sizeof(Element));    if(!L->elem)return -1;    L->length=0;    L->listsize=List_init_size;}int Initlist1(Sqlist *L)//一如既往的初始化顺序表{//注意新表长度为原来两表长度的两倍,需重新分配储存容量    L->elem=(Element *)malloc(2*List_init_size*sizeof(Element));    if(!L->elem)return -1;    L->length=0;    L->listsize=List_init_size;}void Createlist(Sqlist *L,int m)//输入函数{    int i;    for(i=0;i<m;i++)    {        scanf("%d",&L->elem[i]);    }    L->length=m;}int Listinsert(Sqlist *L,int k,int e){//将元素e插入到第k个元素之前    if(k<1||k>L->length+1)return -1;//判断插入位置的合法性    int j;    int pos=k;    for(j=L->length-1;j>=pos-1;j--)    {//从最后一个位置开始移位,将需要插入的位置空出        L->elem[j+1]=L->elem[j];    }    L->elem[pos-1]=e;    L->length++;//每插入一个元素,顺序表长度加一,勿忘    return 1;}void Mergelist(Sqlist *A,Sqlist *B,Sqlist *C){//需要合并的两表A和B,新表C    Initlist1(C);//初始化C    int i=1,j=1;    int k=0;//k从0开始,为了下面方便    int len_a=A->length,len_b=B->length;    while((i<=len_a)&&(j<=len_b))    {//只要有一个表已经遍历完毕,即可跳出循环        if(A->elem[i-1]>B->elem[j-1])        {            Listinsert(C,++k,B->elem[j-1]);            j++;        }        else {                Listinsert(C,++k,A->elem[i-1]);                i++;        }    }    while(i<=len_a)//若A没有遍历完,则将A插入到新表后面    {        Listinsert(C,++k,A->elem[i-1]);        i++;    }    while(j<=len_b)//与上面同理    {        Listinsert(C,++k,B->elem[j-1]);        j++;    }}void Display(Sqlist *L)//输出函数{    int i;    for(i=0;i<L->length;i++)    {        printf(i==(L->length-1)?"%d\n":"%d ",L->elem[i]);    }}int main(){    int m,n;    Sqlist A,B,C;    scanf("%d%d",&m,&n);    Initlist(&A);    Initlist(&B);    Createlist(&A,m);    Createlist(&B,n);    Mergelist(&A,&B,&C);    Display(&C);    return 0;}

此代码在codeblocks环境中运行。


1 0
原创粉丝点击