C语言实现集合的交-并-差

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【问题描述】

编制一个能演示执行集合的并、交和差运算的程序【基本要求】

(1)集合的元素限定为小写字母字符[ 'a'......'z' ]

(2 )演示程序以用户和计算机对话的方式执行

【测试数据】

【实现提示】

以有序链表表示集合

【代码过程】

1。先定义集合的数据类型notes.h

//notes.h

typedef struct LNode...{

ElemType data;

LNode *next;

}*Link, *Position;

typedef struct...{

Link head,tail;

int len;

}LinkSet;

//~

2。以后要用的一些常量放在constValues.h

#include

#include

#include

//函数结果状态代码

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define ElemType int //存放数据的类型

typedef int Status; //函数的返回值//~

3。集合实现函数setsFun.h

/**//****************** 函数定义*********************/ Status InitSets(LinkSet &ls)...{

//初始化集合

ls.head = (Link) malloc( sizeof(Link));

ls.tail = (Link) malloc( sizeof(Link));

if(!ls.head || !ls.tail) exit(OVERFLOW); //如果分配失败

ls.head->next = ls.tail->next = NULL; //头、尾指针为空

ls.len = 0; //长度为0

return OK;

}

Status CreateNode(Link &link,ElemType e)...{

//创建一节点,内容为e

link = (Link) malloc( sizeof(Link));

if(!link) exit(OVERFLOW);

link->data = e; //值设定

link->next = NULL; //指向空

return OK;

}

Position PriorInsertNode(LinkSet &ls,Link &link)...{

//找出节点link要插入到ls的前一个节点

if(!ls.head->next) return ls.head;

Link h1 = ls.head->next, h2 = h1->next; //h1:前一节点,h2:前一节点的后一节点

if(link->data < h1->data) return ls.head; //如果比第一个节点小,返回头指针

while(h1 && h2)...{

if(h1->data < (link->data) && h2->data > (link->data) ) //如果>h1 &&

break;

if(h1->data == (link->data) || h2->data ==(link->data) )

return NULL; //如果重复,返回NULL else //否则,顺次往后挪一个节点h1=h2,h2=h1->next;

}

return h1;

}

Status Append(LinkSet &ls, Link &link)...{

//向集合末尾追加节点

if(ls.head->next == NULL) ls.head->next = link;

else ls.tail->next->next = link;

ls.tail->next = link;

ls.len ++;

return OK;

相关文档
最新文档