1、编制一个演示集合的并、交和差运算的程序 1 实习报告实习报告 题目:题目:编制一个演示集合的并、交和差运算的程序 一、需求分析一、需求分析 1. 本程序中,集合的元素限定为小写字母字符 az,集合的大小 nnext =NULL; return TRUE; (4)void FreeNode(LinkType s-data=p-data; s-next =NULL; return s; (6)ElemType Elem(LinkType p) /*若指针 p!=NULL,则返回 p 所指结点的数据元素,否则返回#*/ (7)LinkType SuccNode(LinkType p) /*若指针 p
2、!=NULL,则返回指向p所指结点的后继元素的指针,否则返 回 NULL*/ (二) 根据有序表的基本操作的特点,有序表采用有序链表实现。链表设头、 尾两个指针和表长数据域,并附设头结点,头结点的数据域没有实在意义。 typedef struct LinkType head,tail; /*分别指向线性链表的头结点和尾结点*/ Int size; /*指示链表当前的长度*/ OrderedList; /*有序链表类型*/ 1. 有序链表的基本操作定义如下:有序链表的基本操作定义如下: (1)bool InitList(OrderedList /构造一个带头结点的空的有序链表 L,并返回 TRU
3、E; /若分配空间失败,则令 L.head 为 NULL,并返回 FALSE; (2)void DestroyList(OrderedList / 扩销毁有序链表 L (3)bool ListEmpty(OrderedList L); / 若 L 不存在或为“空表“,则返回 TRUE,否则返回 FALSE (4)int ListLength(OrderedList L); 编制一个演示集合的并、交和差运算的程序 6 / 返回链表的长度 (5)LinkType GetElemPos(OrderedList L,tnt pos); / 若 L 存在且 0next; k=1; while(p /pr
4、e 指向*p 的前驱,p 指向第一个元素结点 white( p elsep=pre; return FALSE; else return FALSE; /LocateElem (5)void Append(OrderedList else L.head-next=s; L.tail =s; L.size+; 编制一个演示集合的并、交和差运算的程序 8 /Append (6)void InsertAfter(OrderList q-next =s; if(L.tail =q) L.tail =s; L.size+; /InsertAfter (7)void ListTraverse(LinkTy
5、pe p, status (*visit)(LinkType q) while(p) visit(p); p=SuccNode(p); /ListTraverse (三) 集合 Set 利用有序链表类型 OrderedList 来实现,定义为有序集 OrderedSet; typedef OrderedList OrderedSet; 1. 集合类型的基本操作的类 C 伪码描述如下: (1)void Createset(OderedSet /构造空集 T for(i=l; i=length(s); i+) if(islower(sI) / Createset (2)void Destroyse
6、t(OrderedSet /DestroyList (3)void Union(OrderedSet p2=GetElemPos(S2,l); while(pl c2=Elem(p2); if(cl=c2) Append(T,Copy(pl); pl=SuccNode(pl); if(cl=c2) p2=SuccNode(p2); else Append(T,Copy(p2); p2=SuccNode(p2); while(pl) Append( T,Copy(pl); pl=SuccNode(pl); while(p2) Append(T,Copy(p2); p2=SuccNode(p2); /Union (4)votd Intersection(OrderedSet OrderedSet S2) /求集合 Sl 和 S2 的交集 T if(!InitList(T) T.head =NULL