一、课程题目 集合的并、交和差运算 二、问题描述
功能: 编制一个能演示执行集合的并、交和差运算的程序。 三、基本要求
1)集合的元素限定为小写字母字符【‘a’..‘z’】 2)演示程序以用户和计算机的对话方式执行。 四、测试数据
(1) Set1=”magazine”, Set2=’paper”,
Set1∪Set2=”aegimnprz”,Set1∩
Set2=”ae”,Set1-Set2=”gimnz”;
(2) Set1=”012oper4a6tion89”,Set2=”error data”, Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”, Set1-Set2=”inp”. 五、算法思想
为了实现上述程序的功能,应以有序链表表示集合。为此,需要两个抽象数据类型:有序表和集合。 1、有序表的抽象数据类型定义为: input(linklist l)
初始条件:l是以l为头节点的空链表。 操作结果:生成以l为头节点的非空链表。
output(linklist l)
初始条件:l是以l为头节点的非空链表。
操作结果:将以l为头节点的链表中数据逐个输出。 2、集合的抽象数据类型定义为: heji(linklist A,linklist B,linklist C) 初始条件:链表A、B、C已存在
操作结果:生成一个由A和B的并集构成的集合C。 jiaoji(linklist A,linklist B ,linklist ,C) 初始条件:链表A、B、C已存在
操作结果:生成一个由A和B的交集构成的集合C。 六、模块化分 本程序抱含四个模块:
1) 节点结构单元模块——定义有序表的节点结构; 2) 有序表单元模块——实现有序表的抽象数据类型; 3) 集合单元模块——实现集合获得抽象数据类型; 4)主程序模块: Void main(){ 初始化; do{ 接受命令; 处理命令;
}while(“命令”!=“退出”);
}
七、源程序 # include
}lnode,*linklist; lnode *init_lnode(); void input(linklist l);
void jiaoji(linklist A,linklist B,linklist C); void heji(linklist A,linklist B,linklist C); void output(linklist l); void main() {
lnode *a,*b,*c;
a=init_lnode(); b=init_lnode(); int data; struct node* next;