线性表求两个集合的并集
#include<stdio.h> #define maxsize 100 //宏定义常量表示线性表的最大长度 struct Sqlist { int elem[maxsize]; //线性表占用的数组空间 int last; //记录线性表中最后一个元素在数组elem[]中的位置 }; void initlist(Sqlist &L) //初始化线性表 { L.last=0; } void unionlist(Sqlist &la,Sqlist &lb) //求集合la和lb的并集 { int i,j,e; for(i=0;i<lb.last;i++) { e=lb.elem[i]; j=0; //用e记录线性表lb中的元素 while((j<la.last)&&(la.elem[j]!=e)) j++; //扫描顺序表la,直到找到值为e的元素,或扫描到表尾还没找到 if(j==la.last) { la.elem[la.last]=e;la.last++; //将lb中值不为e的元素加入到la中,表长为la,lb去掉相同元素后的两表长之和 } } } int main() { int i; char c; struct Sqlist la,lb; printf("初始化顺序表 "); initlist(la); initlist(lb); printf("请输入集合a的元素 "); for(i=0;i<maxsize;i++) { scanf("%d%c",&la.elem[i],&c); la.last++; if(c== ) break; } printf("请输入集合b的元素 "); for(i=0;i<maxsize;i++) { scanf("%d%c",&lb.elem[i],&c); lb.last++; if(c== ) break; } unionlist(la,lb); printf("集合a与b的并集为: "); for(i=0;i<la.last;i++) printf("%-4d",la.elem[i]); printf(" "); return 0; }
下一篇:
[算法] - 拿捏递归算法