diff --git a/CFree/▼配套习题解析/▼02 线性表/▼习题测试文档-02/Question-2.26-main.c b/CFree/▼配套习题解析/▼02 线性表/▼习题测试文档-02/Question-2.26-main.c index c014ca7..e995bd2 100644 --- a/CFree/▼配套习题解析/▼02 线性表/▼习题测试文档-02/Question-2.26-main.c +++ b/CFree/▼配套习题解析/▼02 线性表/▼习题测试文档-02/Question-2.26-main.c @@ -2,81 +2,96 @@ #include "../../../α㷨ʵ/01 /Status.h" //**01 **// #include "../../../α㷨ʵ/02 Ա/04 SinglyLinkedList/SinglyLinkedList.c" //**02 Ա**// -/* ԭ */ -Status Algo_2_26(LinkList La, LinkList Lb, LinkList Lc); - +/* + * 2.26 + * + * 󽻼C=ABҪٿռ䡣 + */ +Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc); + +// ԺӡԪ void PrintElem(LElemType_L e); - //Ժӡ -int main(int argc, char *argv[]) -{ - LinkList La, Lb, Lc; - int i; - - if(InitList_L(&La) && InitList_L(&Lb) && InitList_L(&Lc)) //ɹ - { - for(i=1; i<=10; i++) //ֵ - { - ListInsert_L(La, i, i); - ListInsert_L(Lb, i, 2*i); - } - } - - printf("La = "); - ListTraverse_L(La, PrintElem); // - printf("\n"); - printf("Lb = "); - ListTraverse_L(Lb, PrintElem); - printf("\n\n"); - - Algo_2_26(La, Lb, Lc); - printf("Lc=LaLb= "); - ListTraverse_L(Lc, PrintElem); - printf("\n\n"); - - return 0; + +int main(int argc, char* argv[]) { + LinkList La, Lb, Lc; + int i; + + // 0ŵԪ洢鳤 + int a[] = {10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; + int b[] = {8, 1, 5, 7, 8, 10, 15, 17, 20}; + + // ׼ݣͬһеԪֵͬ + InitList_L(&La); + InitList_L(&Lb); + for(i = 1; i <= a[0]; i++) { + ListInsert_L(La, i, a[i]); + } + for(i = 1; i <= b[0]; i++) { + ListInsert_L(Lb, i, b[i]); + } + printf("La = "); + ListTraverse_L(La, PrintElem); + printf("\n"); + printf("Lb = "); + ListTraverse_L(Lb, PrintElem); + printf("\n"); + + // 󽻼 + Algo_2_26(La, Lb, &Lc); + + printf("Lc = "); + ListTraverse_L(Lc, PrintElem); + printf("\n"); + + return 0; } -/* -2.26C=AB -*/ -Status Algo_2_26(LinkList La, LinkList Lb, LinkList Lc) -{ - LinkList pa, pb, pc, s; - if(!La || !Lb) - return ERROR; - - pa = La->next; - pb = Lb->next; - pc = Lc; - - while(pa && pb) - { - if(pa->data==pb->data) - { - s = (LinkList)malloc(sizeof(LNode)); - if(!s) - exit(OVERFLOW); - s->data = pa->data; - s->next = NULL; - - pc->next = s; - - pc = pc->next; - pa = pa->next; - pb = pb->next; - } - else if(pa->datadata) - pa = pa->next; - else - pb = pb->next; - } - - return OK; +// 󽻼C=ABҪٿռ䡣 +Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { + LinkList pa, pb, pc, s; + + // ʼLc + InitList_L(Lc); + + // ȷLaLb + if(La == NULL || Lb == NULL) { + return ERROR; + } + + pa = La->next; + pb = Lb->next; + pc = *Lc; + + // ֻLaLbĹͬ־ + while(pa != NULL && pb != NULL) { + if(pa->data < pb->data) { + pa = pa->next; + } else if(pa->data > pb->data) { + pb = pb->next; + } else { + // ½ŽԪ + s = (LinkList) malloc(sizeof(LNode)); + if(s == NULL) { + exit(OVERFLOW); + } + s->data = pa->data; + s->next = NULL; + + // Ԫز뵽Lc + pc->next = s; + pc = pc->next; + + pa = pa->next; + pb = pb->next; + } + } + + return OK; } -void PrintElem(LElemType_L e) -{ - printf("%d ", e); +// ԺӡԪ +void PrintElem(LElemType_L e) { + printf("%2d ", e); } diff --git a/CLion/ExerciseBook/02.26/02.26.c b/CLion/ExerciseBook/02.26/02.26.c index 5615f32..31c4a5e 100644 --- a/CLion/ExerciseBook/02.26/02.26.c +++ b/CLion/ExerciseBook/02.26/02.26.c @@ -5,7 +5,7 @@ /* * 题2.26 * - * 求交集:C=A∩B。 + * 求交集:C=A∩B,要求新链表另辟空间。 */ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc); @@ -17,15 +17,18 @@ int main(int argc, char* argv[]) { LinkList La, Lb, Lc; int i; - int a[10] = {1, 2, 2, 3, 4, 4, 9, 9, 10, 12}; - int b[10] = {1, 1, 2, 2, 3, 3, 4, 5, 12, 13}; + // 0号单元存储的是数组长度 + int a[] = {10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; + int b[] = {8, 1, 5, 7, 8, 10, 15, 17, 20}; - // 准备测试数据 + // 准备测试数据,同一表中的元素值各不相同 InitList(&La); InitList(&Lb); - for(i = 1; i <= 10; i++) { - ListInsert(La, i, a[i - 1]); - ListInsert(Lb, i, b[i - 1]); + for(i = 1; i <= a[0]; i++) { + ListInsert(La, i, a[i]); + } + for(i = 1; i <= b[0]; i++) { + ListInsert(Lb, i, b[i]); } printf("La = "); ListTraverse(La, PrintElem); @@ -41,17 +44,19 @@ int main(int argc, char* argv[]) { return 0; } -// 求交集:C=A∩B + +// 求交集:C=A∩B,要求新链表另辟空间。 Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { LinkList pa, pb, pc, s; + // 初始化Lc + InitList(Lc); + // 确保La和Lb存在 if(La == NULL || Lb == NULL) { return ERROR; } - InitList(Lc); - pa = La->next; pb = Lb->next; pc = *Lc; @@ -63,16 +68,16 @@ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { } else if(pa->data > pb->data) { pb = pb->next; } else { - // Lc中元素可能重复 + // 创建新结点存放交集元素 s = (LinkList) malloc(sizeof(LNode)); if(s == NULL) { exit(OVERFLOW); } s->data = pa->data; s->next = NULL; - + + // 将交集元素插入到Lc pc->next = s; - pc = pc->next; pa = pa->next; @@ -85,5 +90,5 @@ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { // 测试函数,打印元素 void PrintElem(ElemType e) { - printf("%d ", e); + printf("%2d ", e); } diff --git a/Dev-C++/ExerciseBook/02.26/02.26.cpp b/Dev-C++/ExerciseBook/02.26/02.26.cpp index f9f4f64..da453be 100644 --- a/Dev-C++/ExerciseBook/02.26/02.26.cpp +++ b/Dev-C++/ExerciseBook/02.26/02.26.cpp @@ -5,7 +5,7 @@ /* * 2.26 * - * 󽻼C=AB + * 󽻼C=ABҪٿռ䡣 */ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc); @@ -16,46 +16,51 @@ void PrintElem(ElemType e); int main(int argc, char* argv[]) { LinkList La, Lb, Lc; int i; - - int a[10] = {1, 2, 2, 3, 4, 4, 9, 9, 10, 12}; - int b[10] = {1, 1, 2, 2, 3, 3, 4, 5, 12, 13}; - - // ׼ + + // 0ŵԪ洢鳤 + int a[] = {10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; + int b[] = {8, 1, 5, 7, 8, 10, 15, 17, 20}; + + // ׼ݣͬһеԪֵͬ InitList(&La); InitList(&Lb); - for(i = 1; i <= 10; i++) { - ListInsert(La, i, a[i - 1]); - ListInsert(Lb, i, b[i - 1]); + for(i = 1; i <= a[0]; i++) { + ListInsert(La, i, a[i]); + } + for(i = 1; i <= b[0]; i++) { + ListInsert(Lb, i, b[i]); } printf("La = "); ListTraverse(La, PrintElem); printf("Lb = "); ListTraverse(Lb, PrintElem); - + // 󽻼 Algo_2_26(La, Lb, &Lc); - + printf("Lc = "); ListTraverse(Lc, PrintElem); - + return 0; } -// 󽻼C=AB + +// 󽻼C=ABҪٿռ䡣 Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { LinkList pa, pb, pc, s; - + + // ʼLc + InitList(Lc); + // ȷLaLb if(La == NULL || Lb == NULL) { return ERROR; } - - InitList(Lc); - + pa = La->next; pb = Lb->next; pc = *Lc; - + // ֻLaLbĹͬ־ while(pa != NULL && pb != NULL) { if(pa->data < pb->data) { @@ -63,27 +68,28 @@ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { } else if(pa->data > pb->data) { pb = pb->next; } else { - // LcԪؿظ + // ½ŽԪ s = (LinkList) malloc(sizeof(LNode)); if(s == NULL) { exit(OVERFLOW); } s->data = pa->data; s->next = NULL; - + + // Ԫز뵽Lc pc->next = s; - pc = pc->next; - + pa = pa->next; pb = pb->next; } } - + return OK; } // ԺӡԪ void PrintElem(ElemType e) { - printf("%d ", e); + printf("%2d ", e); } + diff --git a/VisualC++/ExerciseBook/02.26/02.26.c b/VisualC++/ExerciseBook/02.26/02.26.c index f9f4f64..bff08cb 100644 --- a/VisualC++/ExerciseBook/02.26/02.26.c +++ b/VisualC++/ExerciseBook/02.26/02.26.c @@ -5,7 +5,7 @@ /* * 2.26 * - * 󽻼C=AB + * 󽻼C=ABҪٿռ䡣 */ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc); @@ -17,15 +17,18 @@ int main(int argc, char* argv[]) { LinkList La, Lb, Lc; int i; - int a[10] = {1, 2, 2, 3, 4, 4, 9, 9, 10, 12}; - int b[10] = {1, 1, 2, 2, 3, 3, 4, 5, 12, 13}; + // 0ŵԪ洢鳤 + int a[] = {10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; + int b[] = {8, 1, 5, 7, 8, 10, 15, 17, 20}; - // ׼ + // ׼ݣͬһеԪֵͬ InitList(&La); InitList(&Lb); - for(i = 1; i <= 10; i++) { - ListInsert(La, i, a[i - 1]); - ListInsert(Lb, i, b[i - 1]); + for(i = 1; i <= a[0]; i++) { + ListInsert(La, i, a[i]); + } + for(i = 1; i <= b[0]; i++) { + ListInsert(Lb, i, b[i]); } printf("La = "); ListTraverse(La, PrintElem); @@ -41,17 +44,19 @@ int main(int argc, char* argv[]) { return 0; } -// 󽻼C=AB + +// 󽻼C=ABҪٿռ䡣 Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { LinkList pa, pb, pc, s; + // ʼLc + InitList(Lc); + // ȷLaLb if(La == NULL || Lb == NULL) { return ERROR; } - InitList(Lc); - pa = La->next; pb = Lb->next; pc = *Lc; @@ -63,16 +68,16 @@ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { } else if(pa->data > pb->data) { pb = pb->next; } else { - // LcԪؿظ + // ½ŽԪ s = (LinkList) malloc(sizeof(LNode)); if(s == NULL) { exit(OVERFLOW); } s->data = pa->data; s->next = NULL; - + + // Ԫز뵽Lc pc->next = s; - pc = pc->next; pa = pa->next; @@ -85,5 +90,5 @@ Status Algo_2_26(LinkList La, LinkList Lb, LinkList* Lc) { // ԺӡԪ void PrintElem(ElemType e) { - printf("%d ", e); + printf("%2d ", e); }