void main() { LinkList *L1,*L2,*L3; ElemType a[]={'1','3','5'}; ElemType b[]={'2','4','6','7'}; InitList(L1); InitList(L2); InitList(L3); CreateListR(L1,a,3); printf("L1:");DispList(L1); CreateListR(L2,b,4); printf("L2:");DispList(L2); printf("归并\n"); UnionList(L1,L2,L3); printf("L3:");DispList(L3); }
int main() { SqList L; ElemType e; Status i; int j,k; i = InitList(&L); printf("L.length = %d\n\n",L.length); for(j=1; j<=5; j++) ListInsert(&L,1,j); printf("L.data = :"); ListTraverse(L); printf("L.length = %d\n\n",L.length); i=ListEmpty(L); printf("L 是否空: i=%d(1:是 0:否)\n\n",i); ClearList(&L); printf("清空 L 后: L.length=%d\n\n",L.length); i=ListEmpty(L); printf("L 是否空: i=%d(1:是 0:否)\n\n",i); for(j=1;j<=10;j++) ListInsert(&L,j,j); printf("在 L 的表尾依次插入 1-10 后: L.data="); ListTraverse(L); printf("L.length=%d \n\n",L.length); ListInsert(&L,1,0); printf("在 L 的表头插入 0 后: L.data="); ListTraverse(L); printf("L.length=%d \n\n",L.length); GetElem(L,5,&e); printf("第 5 个元素的值为: %d\n\n",e); for(j=3;j<=4;j++) { k=LocateElem(L,j); if(k) printf("第%d 个元素的值为%d\n\n",k,j); else printf("没有值为%d 的元素\n\n",j); } k=ListLength(L); /* k 为表长 */ for(j=k+1;j>=k;j--) { i=ListDelete(&L,j,&e); /* 删除第 j 个数据 */ if(i==ERROR) printf("删除第%d 个数据失败\n\n",j); else printf("删除第%d 个的元素值为: %d\n\n",j,e); } printf("依次输出 L 的元素: "); ListTraverse(L); j=5; ListDelete(&L,j,&e); /* 删除第 5 个数据 */ printf("删除第%d 个的元素值为: %d\n\n",j,e); printf("依次输出 L 的元素: "); ListTraverse(L); //构造一个有 10 个数的 Lb SqList Lb; i=InitList(&Lb); for(j=6;j<=15;j++) i=ListInsert(&Lb,1,j); UnionList(&L,Lb); printf("依次输出合并了 Lb 的 L 的元素: "); ListTraverse(L); return 0; }
int main(void) { int select; /*保存选择变量*/ size_t pos; /*位序*/ Elem e; /*保存从函数返回的结点的值*/ Elem v; /*保存传递给函数的结点的值*/ int n = 1; SQLIST L; InitList(&L); srand((int)time(NULL)); while (n <= 10) { InsertList(&L, n, rand()%20); ++n; } while (1) /*while_@1*/ { if (!L.elem) { printf("表不存在!\n"); break; } system("cls"); Menu(); printf("请输入您的选择(1~10):"); scanf("%d", &select); getchar(); switch (select) /*switch_@1*/ { case 1: /*插入数据*/ pos = InputPos("插入位置为:"); e = InputValue("结点元素为:"); if (FAILE == InsertList(&L, pos, e)) { printf("插入失败!\n"); } else { printf("插入成功!\n"); } getchar(); break; case 2: /*整表输出*/ printf("整表为:"); TraveList(&L); getchar(); break; case 3: /*删除结点*/ pos = InputPos("删除的结点位置是:"); if (OK == DeleteList(&L, pos, &e)) { printf("删除成功,删除的元素是%d!\n", e); } else { printf("删除失败!\n"); } getchar(); break; case 4: /*输出表的长度*/ printf("线性表长度: %d \n", ListLength(&L)); getchar(); break; case 5: /*清空表*/ ClearList(&L); printf("该表已经清空!\n"); getchar(); break; case 6: /*判断链表是否存在特定结点*/ v =InputValue("要查找的数值为:"); printf("要查找的元素在链表的第%d位!(第0位表示不存在)\n", LocateElem(&L, v)); getchar(); break; case 7: /*返回特定位序结点*/ pos = InputPos("获取位置为:"); if (OK == GetElem(&L, pos, &e)) { printf("该结点为:%d\n", e); } else { printf("不存在!\n"); } getchar(); break; case 8: /*判断链表*/ if (ListEmpty(&L) == TRUE) { printf("表为空!\n"); } else { printf("表非空!\n"); } getchar(); break; case 9: /*销毁整表*/ DestroyList(&L); printf("表已删除!\n"); getchar(); break; case 10: /*合并链表*/ { SQLIST La; size_t i = 0; InitList(&La); srand((int)time(NULL)); for (i=1; i<=10; ++i) { InsertList(&La, i, rand()%15); } printf("待求并集的表为: "); TraveList(&La); UnionList(&L, &La); DestroyList(&La);/*避免内存泄漏*/ printf("操作完成!\n"); getchar(); break; } case 11: /*求前驱结点*/ v = InputValue("寻找哪个元素的前驱结点: "); if (OK == PriorELem(&L, v , &e)) { printf("前驱结点元素为: %d", e); } else { printf("未找到!\n"); } getchar(); break; case 12: /*求后去结点*/ v = InputValue("寻找哪个元素的后驱结点: "); if (OK == NextELem(&L, v , &e)) { printf("后驱结点元素为: %d", e); } else { printf("未找到!\n"); } getchar(); break; default: printf("请重新选择!\n"); getchar(); break; }/*switch_@1*/ } /*while_@1*/ return EXIT_SUCCESS; }