大三总结

有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。元素类型为整型

include <stdio.h>

include <stdlib.h>

define MAX_SIZE 100

typedef struct {
int data[MAX_SIZE];
int length;
} SqList;
void initList(SqList *L) {
L->length = 0;
}
void insertList(SqList *L, int e) {
int i;
for (i = L->length - 1; i >= 0 && L->data[i] > e; i--) {
L->data[i + 1] = L->data[i];
}
L->data[i + 1] = e;
L->length++;
}
void mergeLists(SqList *A, SqList *B, SqList *C) {
int i = 0, j = 0, k = 0;
while (i < A->length && j < B->length) {
if (A->data[i] < B->data[j]) {
insertList(C, A->data[i]);
i++;
} else {
insertList(C, B->data[j]);
j++;
}
}
while (i < A->length) {
insertList(C, A->data[i]);
i++;
}
while (j < B->length) {
insertList(C, B->data[j]);
j++;
}
}
void removeDuplicates(SqList *L) {
int i, j;
for (i = 0; i < L->length; i++) {
for (j = i + 1; j < L->length; j++) {
if (L->data[i] == L->data[j]) {
int k;
for (k = j; k < L->length - 1; k++) {
L->data[k] = L->data[k + 1];
}
L->length--;
j--;
}
}
}
}
void printList(SqList *L) {
for (int i = 0; i < L->length; i++) {
if (i > 0) {
printf(",");
}
printf("%d", L->data[i]);
}
printf("\n");
}

int main() {
SqList A, B, C;
initList(&A);
initList(&B);
initList(&C);

int num;
scanf("%d", &num);
while (num!= -1) {
    insertList(&A, num);
    scanf("%d", &num);
}

scanf("%d", &num);
while (num!= -1) {
    insertList(&B, num);
    scanf("%d", &num);
}

mergeLists(&A, &B, &C);
removeDuplicates(&C);
printList(&C);

return 0;

}

posted @ 2026-01-13 01:05  C(5,3)  阅读(0)  评论(0)    收藏  举报