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

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

typedef struct LNode...{
ElemType data;
LNode
*next;
}*Link, *Position;
typedef struct...{
Link head,tail;
int
len;
}LinkSet;
//~ 2。以后要用的一些常量放在
#include<stdio.h>
}
Position GetHead(LinkSet &ls)...{ //获得集合的头节点 return ls.head;
}
Position NextPos(Link &link)...{
//获得当前节点的下一个节点 return link?link->next:link; }
Status Empty(LinkSet &ls)...{ //空为真 return ls.head->next==NULL;
}
//如果集合中已有相应元素 //如果前一节点为尾节点,修改 tail
Position PriorNode(LinkSet &ls, Link &link)...{ //返回集合中 该节点的前一节点,不存在返回 NULL int j=0; Link pre,h = ls.head; while(h->next && j<=ls.len && h!=link)...{ pre = h; h=h->next; j++; } if(j==0) return NULL; return pre;
}Baidu Nhomakorabea
ElemType GetCurElem(Link &link)...{ //获得当前节点的数据 return link->data;
#define ElemType
int
//存放数据的类型
typedef int Status; //~ 3。集合实现函数
setsFun.h
//函数的返回值
/**//****************** 函数定义 *********************/ Status InitSets(LinkSet &ls)...{
}
Status PrintSets(LinkSet &ls)...{ //打印集合 Link h=ls.head->next; printf("[ "); while(h)...{ printf("%c ",h->data); h = h->next; } printf(" ] "); return OK;
//初始化 集合 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 = ls.len = 0; 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; 节点
#include <malloc.h>
#include <stdlib.h> //函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK
1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
constValues.h
//h1:前一节点,h2:前一节点的后一
if(link->data < h1->data) return ls.head;
//如果比第一个节点小,返回头指针
while(h1 && h2)...{ if(h1->data < (link->data) && h2->data > (link->data) )
NULL;
//头、尾指针为空 //长度为 0
Status CreateNode(Link &link,ElemType e)...{ //创建一节点,容为 e link = (Link) malloc( sizeof(Link)); if(!link) exit(OVERFLOW); link->data = e; link->next = NULL; return OK;
【问题描述】 编制一个能演示执行集合的并、交和差运算的程序
【基本要求】 (1)集合的元素限定为小写字母字符[ 'a'......'z' ] (2 )演示程序以用户和计算机对话的方式执行
【测试数据】
【实现提示】 以有序链表表示集合
【代码过程】 1。先定义 集合的数据类型 notes.h
//notes.h
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;
找到插入的地方了
//如果>h1 && <h2,说明
break;
if(h1->data == (link->data) || h2->data ==(link->data) )
return NULL;
//如果重复,返回 NULL
else
//否则,顺次往后挪一个节点
h1=h2,h2=h1->next;
}
}
Status InsertNode(LinkSet &ls, Link &link)...{ //向集合中插入节点 Position p = PriorInsertNode(ls,link); if(!p) return ERROR; link->next = p->next; if(!p->next) ls.tail->next = link; p->next = link; ls.len++; return OK;
相关文档
最新文档