2.3集合交运算问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.问题描述
用线性表表示两个集合,求两个集合的交。
2.算法实现(程序):
头文件:
template
struct Node
{
T data;
Node *next;
};
template
class LinkList
{
private:
Node
public:
LinkList() ;//构造函数,创建空链表
~LinkList();//析构函数,删除表空间
void CreateList(int n);//创建具有n个元素的线性链表
T Delete(int i);//删除表中第i个元素
T GetElem(int i);//获取第i个元素的值
int Locate(T e);//在链表中查找值为e的元素
void ListDisplay();//输出表元素
};
template
LinkList
{
Head=new Node
Head->next=NULL;
}
template
LinkList
{
Node
while(Head)
{//从头结点开始,依次释放结点
p=Head;
Head=Head->next;
delete p;
}
Head=NULL;//头结点指向空
}
template
void LinkList
{//尾插法(正序)创建具有n个元素的线性表
Node
p=Head;
cout<<"请依次输入"< for(int i=1;i<=n;i++) { s=new Node cin>>s->data;//输入新建数据元素值 s->next=p->next;//新结点链入表尾 p->next=s; p=s; } } template T LinkList {//删除指定位置元素 T x; Node p=Head;//查找从头结点开始 int j=0;//计数器初始化 while(p->next && j { p=p->next; j++; } if(!p->next||j>i-1) throw"位置异常";//删除位置不合理else //删除位置合理 { q=p->next;// 暂存删除结点位置 p->next=q->next;//从链表中摘除删除结点 x=q->data;//取删除数据元素的值 delete q;// 释放删除点 return x;//返回删除元素的值 } } template int LinkList {//按值定位 int j=1; Node p=Head->next; while(p && p->data!=e) { p=p->next; j++; } if(p==NULL) return 0; else return j; } template T LinkList {//获取第i个元素的值 Node p=Head->next;//从首结点开始 int j=1;//计数器初始化 while(p&&j { p=p->next;j++; } if(!p||j>i)//定位位置不合理:空表或i小于0或i大于表长throw "位置"; else //位置合理 return p->data; } template void LinkList {//显示链表 Node p=Head->next; int i=1; if(!p)cout<<"该集合为空"; else { while(p) { cout< p=p->next; i++; } } cout< } 源文件: #include #include"process.h"//exit() #include "LinkList.h" typedef char T; void main() {T e; int i; char ans; int flag=1; while(flag) { int a=0; LinkList int la_len,lb_len; cout<<"请输入要创建A集合中元素个数:"; cin>>la_len;//将创建的链表中数据元素的个数La.CreateList(la_len); cout<<"请输入要创建的B集合中元素个数:"; cin>>lb_len;//将创建的链表中数据元素的个数Lb.CreateList(lb_len); cout<<"La:"<<"\t"; La.ListDisplay(); cout<<"Lb:"<<"\t"; Lb.ListDisplay(); for(i=1;i<=la_len-a;i++) { e=La.GetElem(i); if(!Lb.Locate(e)) {La.Delete(i),a++;i--;} }//for cout<<"union:"<<"\t"; La.ListDisplay(); cout<<"继续吗(Y/N)?"< cin>>ans; if(ans=='Y'||ans=='y') flag=1; else { flag=0;