1.問題描述
? ? ? ? 將a,b兩個有序順序表進行合并,放在c順序表當中,并且要保證順序表c仍然有序。
2.解題思路
? ? ? ? 因為a,b兩個順序表是有序的,所有可以從前往后一起查找a,b當中最小的一個數值,放入到c中。文章來源:http://www.zghlxwxcb.cn/news/detail-716995.html
????????如果遍歷到最后,a遍歷完了,b沒有遍歷完,就把b剩下的放入c中;反之,b遍a沒有遍歷完,就把a剩下的放入c中。文章來源地址http://www.zghlxwxcb.cn/news/detail-716995.html
3.實現代碼
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct { //順序表的結構
ElemType *data;
int length;
int listsize;
}List;
int InitList(List *L) //初始化順序表
{
L->data = (ElemType*)malloc(MAXSIZE*sizeof(ElemType));
if(!(L->data))
exit(0);
L->length=0;
L->listsize=MAXSIZE;
return 1;
}
void CreatList(List *L) //創(chuàng)建一個順序表
{
int i;
printf("請輸入測試的數據總數:\n");
scanf("%d",&L->length);
printf("請輸入測試的數據:\n");
for(i=0;i<L->length;i++)
scanf("%d",&L->data[i]);
}
void Printf(List *L) //打印順序表中的值
{
int i;
if(L->length==0)
{
printf("順序表為空!");
return ;
}
else
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}
void MergeList(List *a,List *b,List *c){ //合并兩個順序表放入c中
int i=0;
int j=0;
int k=0;
int La_len=a->length;
int Lb_len=b->length;
c->length=a->length+b->length;
while((i<La_len)&&(j<Lb_len)){
if(a->data[i]<=b->data[j]) //如果a當前的值小于b
{
c->data[k]=a->data[i]; //c放入當前a的值
i++; //a,c都往后移一位
k++;
}
else{ //如果a當前值大于等于b
c->data[k]=b->data[j]; //c放入當前b的值
j++; //b,c都往后移一位
k++;
}
}
while(i<La_len){ //如果b遍歷完,a還沒遍歷完,把a剩余的全放入c中
c->data[k]=a->data[i];
k++;
i++;
}
while(j<Lb_len){ //如果a遍歷完,b還沒遍歷完,把b剩余的全放入c中
c->data[k]=b->data[j];
k++;
j++;
}
}
int main()
{
List *L1;
List *L2;
List *L3;
L1 = (List*) malloc(sizeof(List));
L2 = (List*) malloc(sizeof(List));
L3 = (List*) malloc(sizeof(List));
InitList(L1);
InitList(L2);
CreatList(L1);
CreatList(L2);
printf("輸入順序表A:");
Printf(L1);
printf("輸入順序表B:");
Printf(L2);
L3->data = (ElemType*)malloc(MAXSIZE*sizeof(ElemType));
MergeList(L1,L2,L3);
getchar();
printf("輸入順序表C:");
Printf(L3);
getchar();
return 0;
}
到了這里,關于數據結構:兩個順序表合并算法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!