合并顺序表分成两种情况。
一、将两个有序表合并成一个有序表,并保留相同的数据。
二、将两表个直接合并,并只保留一个相同的数据。
定义结构体
#include <stdio.h>
#include <stdlib.h>#define MAXSIZE 10 //数组的最大长度
typedef struct{ //顺序表的初始化
int *data; //定义顺序表中元素类型的数组指针
int length; //当前顺序表的长度
}SqList;
初始化
int i,j,n1;
SqList L1; //初始化三个顺序表
SqList L2;
SqList L3; //合并后的新表
L1.data=(int *)malloc(sizeof(int)*MAXSIZE);
L2.data=(int *)malloc(sizeof(int)*MAXSIZE);
L3.data=(int *)malloc(sizeof(int)*MAXSIZE);
L1.data[0]=1;
L1.data[1]=7;
L1.data[2]=9;
L2.data[0]=2;
L2.data[1]=4;
L2.data[2]=6;
L2.data[3]=7;
L1.length=3;
L2.length=4;
L3.length=L1.length+L2.length;
int* pa=L1.data; //L1的指针
int* pb=L2.data; //L2的指针
int* pc=L3.data; //L3的指针
int* pa_Last=L1.data+L1.length-1; //指向L1末尾的指针
int* pb_Last=L2.data+L2.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<L2.length;i++){//合并L1、L2,同样的元素去掉
n1=L2.data[i];
for(j=0;j<L1.length;j++){
if(n1==L1.data[j]){
break;
}
else if(j+1==L1.length){//判断到最后一个数据再赋值
L1.data[L1.length]=n1;
L1.length++;
}
}
}