数据结构1.3线性表的相关设计实现

要求

设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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43451616/article/details/86436787
今日推荐