实验4集合的交并和差运算的实现

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

班级:计算机11-3班学号:姓名:曲玉昆成绩:_________

实验四集合的交、并和差运算的实现

1. 问题描述

用有序单链表表示集合,实现集合的交、并和差运算。

2. 基本要求

⑴对集合中的元素,用有序单链表进行存储;

⑵实现交、并、差运算时,不另外申请存储空间;

⑶充分利用单链表的有序性,算法有较好的时间性能。

3. 设计思想

AB。单链表的结点结构和建立算法和首先,建立两个带头结点的有序单链表表示集合请参见教材,需要注意的是:利用头插法建立有序单链表,实参数组应该是降序排列。

其次,根据集合的运算规则,利用单链表的有序性,设计交、并和差运算。

AB的元素。又属于集合⑴根据集合的运算规则,集合中包含所有既属于集合BA?因此,需查找单链表A和B中的相同元素并保留在单链表A中。算法如下:

的元素。BA或属于集合中包含所有或属于集合⑵根据集合的运算规则,集合B?A xx不相同的元素,则中进行查找,若存在和B中的每个元素,在单链表A因此,对单链表A中。算法请参照求集合的交集自行设计。将该结点插入到单链表的元素。因而不属于集合AB根据集合的运算规则,集合⑶ A-B中包含所有属于集合xx相同的结点,则将该中进行查找,若存在和AB此,对单链表中的每个元素,在单链表中删除。算法请参照求集合的交集自行设计。A结点从单链表.

template

struct Node{

T data;

Node*next;};

template

class LinkList{

public:

LinkList(T a[],int n);//建立有n个元素的单链表

~LinkList();

void Interest(Node *A, Node *B);//求交集

void Sum(Node *A,Node *B);/

void Subtraction(Node *A,Node *B);

void PrintList();

void Show(int i);

Node *first;};

template

LinkList::LinkList(T a[],int n){

Node*s;

first = new Node;

first->next=NULL;

for(int i=0;i

s = new Node;

s->data=a[i];

s->next=first->next;

first->next=s; }}

template

LinkList::~LinkList(){

Node *p,*q;

p = first;//工作指针p初始化

while(p) //释放单链表的每一个结点的存储空间{

q = p;//暂存被释放结点

p = p->next;//工作指针p指向被释放结点的下一个结点,使单链表不断开 delete q; }}

template

void LinkList::Interest(Node *A,Node *B){

Node *pre,*p,*q;

re = A;p =A ->next;q = B->next;p

while(p&&q){

if(p->data < q->data){

pre->next = p->next;

p = pre->next;}

else if(p->data > q->data){

q = q->next;}

else{

pre = p;

p = p->next;

q = q->next;

} }}

//求并集

template

void LinkList::Sum(Node *A,Node *B{

Node *pre,*p,*q;

pre = A; p = A->next;

q = B->next;

while(p&&q){

if(p->data < q->data){

pre = p;

p = p->next;}

else if(p->data > q->data){

q = q->next;}

else{

pre->next = p->next;

p = p->next;

q = q->next;}}}

template

void LinkList::Subtraction(Node *A,Node *B){ Node *pre,*p,*q,*pra;

pre = A; pra = B; p = A->next; q = B->next;

while(p&&q){

if(p->data < q->data){

pre = p;

p = p->next; }

else if(p->data > q->data){

q = q->next;}

else{

pre->next = p->next;

p = pre->next;

q = q->next;}}}

template

void LinkList::PrintList(){

Node *p;

p=first->next;//工作指针p初始化

while(p != NULL)//遍历输出所有元素{

cout<data;

p = p->next; }

cout<

//菜单函数

int meun(){

int m;

do {

相关文档
最新文档