要求
设A和B是两个非递减的顺序表。编写算法,把A和B中都存在的元素组成新的由大到小排列的顺序表C,并分析算法的时间复杂度。
实现如下
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct node{
int *data;
int length;
int listsize;
}figure[MAXSIZE];
void initlist(figure list){
list->data = (int *)malloc(sizeof(int)*MAXSIZE);
list->length = 0;
list->listsize = MAXSIZE;
}
void obtain(figure list){
printf("请输入表中非递减数据共%d个:\n",MAXSIZE);
for(int i = 0;i < MAXSIZE;i++){
scanf("%d",&list->data[i]);
list->length++;
}
}
void seek(figure A,figure B,figure C){
int x = 0;
for(int j = 0;j < MAXSIZE;j++){
for(int i = 0;i < MAXSIZE;i++){
if(A->data[j] == B->data[i]){
C->data[x] = A->data[j];
C->length++;
x++;
}
}
}
}
void sortAndPrint(figure C){
int itemp = 0;
for(int i = 0;i < C->length;i++){
for(int j = i + 1;j < C->length;j++){
if(C->data[i] < C->data[j]){
itemp = C->data[i];
C->data[i] = C->data[j];
C->data[j] = itemp;
}
}
}
printf("合并两数组后降序输出为:\n");
for(int l = 0;l < C->length;l++){
printf("%2d ",C->data[l]);
}
}
int main() {
figure A,B,C;
initlist(A);initlist(B);initlist(C);
obtain(A);obtain(B);
seek(A,B,C);
sortAndPrint(C);
return 0;
}