1、主要的功能:
2、顺序表的构建:
3、构建一个主函数,并通过switch语句来实现功能选择:
4、由上一步可知,定义了三个集合:La , Lb , Lc ;类型为 SqList 的结构体:
5、菜单功能函数编写:
6、集合初始化函数的编写:
7、集合元素(排序/输出)函数编写:
8、集合A和集合B的并集函数编写:
9、完整代码:#include <stdio.h>#include <stdlib.h>//符号常量定义//返回值符号常量//顺序表符号常量#颊俄岿髭define OK 1#define ERROR 0#define OVERFLOW -2#define INIT_SIZE 100#define LIST_INCREMENT 10//数据类型定义typedef int Status;typedef int ElemType;//数据存放从0号位置开始typedef struct //顺序表的(定义)类型{ ElemType *elem; int length; int listsize;}SqList;Status InitSqList(SqList &L) //初始化顺序表函数{ L.elem = (ElemType *)malloc(INIT_SIZE * sizeof(ElemType)); if(L.elem == NULL) exit(OVERFLOW); L.length = 0; L.listsize = INIT_SIZE; return OK;}Status InputData2Set(SqList &L) //顺序表的信息录入函数{ int n; int i; printf("集合数据个数:"); scanf("%d", &n); if(n <= 0) { printf("\n数据个数错误!\n"); return ERROR; } if(n > L.listsize) { L.elem = (ElemType *)realloc(L.elem, n * sizeof(ElemType)); if(L.elem == NULL) return ERROR; L.listsize = n; } for(i = 0; i < n; i++) { printf("第 %d 个数据:", i + 1); scanf("%d", L.elem + i); //&L.elem[i] } L.length = n; return OK;}void SortSqList(SqList L){ int i, j; for(i = 0; i < L.length; i++) for(j = i + 1; j < L.length; j++) if(L.elem[i] > L.elem[j]) { L.elem[i] = L.elem[i] + L.elem[j]; L.elem[j] = L.elem[i] - L.elem[j]; L.elem[i] = L.elem[i] - L.elem[j]; }}void OutputSetData(SqList L){ int i; printf("\n集合的数据个数:%d!\n", L.length); if(L.length == 0) return; SortSqList(L); printf("\n集合中的数据为:"); for(i = 0; i < L.length; i++) printf(" %d ", L.elem[i]); printf("\n\n");}void combine(SqList La,SqList Lb,SqList &Lc){ int i,j; Lc.length = 0; for(i=0;i<La.length;++i) { for(j=0;j<=Lc.length;++j) if(La.elem[i] == Lc.elem[j]) break; if(j >= Lc.length) { Lc.elem[Lc.length] = La.elem[i]; ++Lc.length; } } for(i=0;i<Lb.length;++i) { for(j=0;j<=Lc.length;++j) if(Lb.elem[i] == Lc.elem[j]) break; if(j >= Lc.length) { Lc.elem[Lc.length] = Lb.elem[i]; ++Lc.length; } } Lc.listsize = Lc.length;}void showmenu() { printf("\n**********************************************************\n"); printf("\t\t1 集合A数据输入\n\n"); printf("\t\t2 集合B数据输入\n\n"); printf("\t\t3 集合A数据显示\n\n"); printf("\t\t4 集合B数据显示\n\n"); printf("\t\t5 集合A和集合B的并集\n\n"); printf("\t\t6 集合A和集合B的交集\n\n"); printf("\t\t7 集合A和集合B的差集\n\n"); printf("\t\t0 退出系统\n\n"); printf("**********************************************************\n"); printf("\n");}int main(){ SqList La, Lb, Lc; if((InitSqList(La) == OK) && (InitSqList(Lb) == OK) && (InitSqList(Lc) == OK)) printf("\n顺序表初始化成功!\n"); else { printf("\n顺序表初始化shibai!\n"); return 1; } int choice = -1; while(choice != 0) { system("cls"); fflush(stdin); showmenu(); printf("\t\t功能选择:"); scanf("%d", &choice); switch(choice) { case 1:{ if(La.length > 0) { printf("\n集合中存在数据,直接覆盖原来的数据,之后重新输入新数据!"); La.length = 0; } if(InputData2Set(La) == OK) printf("\n集合A中数据输入成功!\n"); else printf("\n集合A中数据输入失败!\n"); system("pause"); break;} case 2:{ if(Lb.length > 0) { printf("\n集合中存在数据,直接覆盖原来的数据,之后重新输入新数据!"); Lb.length = 0; } if(InputData2Set(Lb) == OK) printf("\n集合B中数据输入成功!\n"); else printf("\n集合B中数据输入失败!\n"); system("pause"); break;} case 3:{ OutputSetData(La); system("pause"); break;} case 4:{ OutputSetData(Lb); system("pause"); break;} case 5:{ combine(La,Lb,Lc); OutputSetData(Lc); system("pause"); break;} case 0: exit(0); default:printf("\n功能选择错误,请重新选择!"); } } return 1;}