顺序表实例2

来源:互联网 发布:uml画图软件 编辑:程序博客网 时间:2024/06/05 08:26
#include <stdio.h>#include <stdlib.h>#define LISTSIZE 100typedef int DataType;typedef struct {DataType list[LISTSIZE];int length;}SeqList;#include "SeqList.h"/*合并顺序表 A 和 B 到 C 的函数声明*/void MergeList(SeqList A, SeqList B, SeqList *C);void main() {int i, flag;DataType a[] = { 6, 11, 11, 23 };DataType b[] = { 2, 10, 12, 12, 21 };DataType e;SeqList A, B, C;InitList(&A);InitList(&B);InitList(&C);/* 数组 a 中的元素插入到顺序表 A 中 */for (i = 1; i <= (sizeof(a) / sizeof(a[0])); i++) {flag = InsertList(&A, i, a[i - 1]);if (flag == 0) {printf("插入位置非法!");return;}}/* 数组 b 中的元素插入到顺序表 B 中 */for (i = 1; i <= (sizeof(b) / sizeof(b[0])); i++) {flag = InsertList(&B, i, b[i - 1]);if (flag == 0) {printf("插入位置非法!");return;}}printf("顺序表A中的元素:\n");for (i = 1; i <= A.length; i++) {flag = GetElem(A, i, &e);if (flag == 1)printf("%4d", e);}printf("\n");printf("顺序表B中的元素:\n");for (i = 1; i <= B.length; i++) {flag = GetElem(B, i, &e);if (flag == 1)printf("%4d", e);}printf("\n");printf("将在A中出现B的元素合并后C中的元素:\n");MergeList(A, B, &C);for (i = 1; i <= C.length; i++) {flag = GetElem(C, i, &e);if (flag == 1) {printf("%4d", e);}}printf("\n"); printf("合并后C.Length:%4d", C.length);printf("\n");system("pause");}void MergeList(SeqList A, SeqList B, SeqList *C){int i, j, k;DataType e1, e2;i = 1; j = 1; k = 1;while (i <= A.length&&j <= B.length) {GetElem(A, i, &e1);            //取出顺序表 A 中的元素GetElem(B, j, &e2);            //取出顺序表 B 中的元素if (e1 <= e2) {InsertList(C, k, e1);      //将较小的插入 C 中i++;                       //往后移一个位置,准备比较下一个元素k++;}else{InsertList(C, k, e2);j++;k++;}}while (i <= A.length)       //如果A中元素还有剩余,这时B中已经没有元素{GetElem(A, i, &e1);InsertList(C, k, e1);   //将A中剩余元素插入到C中i++;k++;}while (j <= B.length)       //如果B中还有元素剩余,此时A中已经没有元素{GetElem(A, j, &e2);InsertList(C, k, e2);   //将B中剩余元素插入到C中j++;k++;}C->length = A.length + B.length;//C的表长等于A和B的表长之和}

0 0
原创粉丝点击