C++程序设计实践指导1.5求两个整数集合并集改写要求实现
改写要求1:改写为单链表结构可以对任意长度整数集合求并集
#include <cstdlib>
#include <iostream> using namespace std;
struct LinkNode
{
int data;
LinkNode* next;
};
class SET
{
public:
struct LinkNode* creat(int x[],int len);
struct LinkNode* copy(LinkNode* aHead);
int notin(int elem,LinkNode* cHead)
{
LinkNode* p;
p=cHead;
while(p)
{
if(elem==p->data)
return ;
p=p->next;
}
return ;
} void insert(LinkNode* bHead,LinkNode* cHead);
void output(LinkNode* cHead)
{
LinkNode* p=cHead->next;
while(p)
{
cout<<p->data<<"\t";
p=p->next;
}
cout<<endl;
}
}; struct LinkNode* SET::creat(int x[],int len)
{
LinkNode* pHead=new LinkNode;
pHead->next=NULL;
LinkNode* p;
p=pHead;
for(int i=;i<len;i++)
{
LinkNode* newLinkNode=new LinkNode;
newLinkNode->next=NULL;
newLinkNode->data=x[i];
p->next=newLinkNode;
p=newLinkNode;
}
return pHead;
} struct LinkNode* SET::copy(LinkNode* aHead)
{
LinkNode* cHead=new LinkNode;
cHead->next=NULL;
LinkNode* p,*r;
p=aHead->next;
r=cHead;
while(p)
{
LinkNode* newLinkNode=new LinkNode;
newLinkNode->next=NULL;
newLinkNode->data=p->data;
p=p->next;
r->next=newLinkNode;
r=newLinkNode;
}
return cHead;
} void SET::insert(LinkNode *bHead,LinkNode* cHead)
{ LinkNode* q,*s,*t;
q=bHead->next;
s=cHead->next;
while(s)
{
t=s;
s=s->next;
}
while(q)
{
if(notin(q->data,cHead)!=)
{
LinkNode* newLinkNode=new LinkNode;
newLinkNode->next=NULL;
newLinkNode->data=q->data;
t->next=newLinkNode;
t=newLinkNode;
}
q=q->next;
} } int main(int argc, char *argv[])
{
int s1[]={,,,,};
int s2[]={,,,,,};
LinkNode* aHead,*bHead,*cHead,*Head;
SET set;
aHead=set.creat(s1,sizeof(s1)/sizeof(s1[]));
bHead=set.creat(s2,sizeof(s2)/sizeof(s2[]));
cHead=set.copy(aHead);
set.insert(bHead,cHead);
set.output(cHead);
system("PAUSE");
return EXIT_SUCCESS;
}
改写要求2:对任意长度的两个整数集合求交集
#include <cstdlib>
#include <iostream> using namespace std;
struct LinkNode
{
int data;
LinkNode* next;
};
class SET
{
public:
struct LinkNode* creat(int x[],int len);
struct LinkNode* copy(LinkNode* aHead);
int notin(int elem,LinkNode* cHead)
{
LinkNode* p;
p=cHead;
while(p)
{
if(elem==p->data)
return ;
p=p->next;
}
return ;
} struct LinkNode* insert(LinkNode* bHead,LinkNode* cHead);
void output(LinkNode* cHead)
{
LinkNode* p=cHead->next;
while(p)
{
cout<<p->data<<"\t";
p=p->next;
}
cout<<endl;
}
}; struct LinkNode* SET::creat(int x[],int len)
{
LinkNode* pHead=new LinkNode;
pHead->next=NULL;
LinkNode* p;
p=pHead;
for(int i=;i<len;i++)
{
LinkNode* newLinkNode=new LinkNode;
newLinkNode->next=NULL;
newLinkNode->data=x[i];
p->next=newLinkNode;
p=newLinkNode;
}
return pHead;
} struct LinkNode* SET::copy(LinkNode* aHead)
{
LinkNode* cHead=new LinkNode;
cHead->next=NULL;
LinkNode* p,*r;
p=aHead->next;
r=cHead;
while(p)
{
LinkNode* newLinkNode=new LinkNode;
newLinkNode->next=NULL;
newLinkNode->data=p->data;
p=p->next;
r->next=newLinkNode;
r=newLinkNode;
}
return cHead;
} struct LinkNode* SET::insert(LinkNode *bHead,LinkNode* cHead)
{ LinkNode* q,*t;
LinkNode* Head=new LinkNode;
q=bHead->next;
Head->next=NULL;
t=Head;
while(q)
{
if(notin(q->data,cHead)!=)
{
LinkNode* newLinkNode=new LinkNode;
newLinkNode->next=NULL;
newLinkNode->data=q->data;
t->next=newLinkNode;
t=newLinkNode;
}
q=q->next;
}
return Head;
} int main(int argc, char *argv[])
{
int s1[]={,,,,};
int s2[]={,,,,,};
LinkNode* aHead,*bHead,*cHead,*Head;
SET set;
aHead=set.creat(s1,sizeof(s1)/sizeof(s1[]));
bHead=set.creat(s2,sizeof(s2)/sizeof(s2[]));
cHead=set.copy(aHead);
Head=set.insert(bHead,cHead);
set.output(Head);
system("PAUSE");
return EXIT_SUCCESS;
}
C++程序设计实践指导1.5求两个整数集合并集改写要求实现的更多相关文章
- C++程序设计实践指导1.8求指定范围内的所有素数改写要求实现
改写要求1:以指针为数据结构动态开辟存储空间 #include <cstdlib> #include <iostream> using namespace std; class ...
- C++程序设计实践指导1.3求任意整数降序数改写要求实现
改写要求1:动态生成单链表存储 #include <cstdlib> #include <iostream> using namespace std; struct LinkN ...
- C++程序设计实践指导1.1删除序列中相同的数改写要求实现
改写要求1:改写为以指针为数据结构 #include <iostream> #include <cstdlib> using namespace std; class ARP ...
- C++程序设计实践指导1.7超长数列中n个数排序改写要求实现
改写要求1:将以上程序改写为适合超长整数 改写要求2:将以上程序改写为适合超长数列 改写要求3:将数列中指定位置m开始的n个结点重新按降序排序 改写要求4:输出指定位置m开始的n个结点的超长整数 #i ...
- C++程序设计实践指导1.2二维数组的操作运算改写要求实现
改写要求1:改写为以单链表表示二维数组 #include <cstdlib> #include <iostream> using namespace std; struct L ...
- 设计算法,求AB两个整数集合的交集
[本文链接] http://www.cnblogs.com/hellogiser/p/ab-set-intersection.html [分析] 思路1:排序法 对集合A和集合B进行排序(升序,用快排 ...
- 79 两个整数集合A和B,求其交集
[本文链接] http://www.cnblogs.com/hellogiser/p/ab-intersect.html [题目] 两个整数集合A和B,求其交集. [分析] 1. 读取整数集合A中 ...
- c 求两个整数的最大公约数和最小公倍数
//求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...
- 求两个整数的最大公约数GCM
思路分析: (1)求差判定法: 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数 ...
随机推荐
- 01 日志组件XLog
本文地址为:http://www.cnblogs.com/ADTL/p/5357259.html XLog为XCode的日志组件,为系统基本功能. 使用示例: 1.新建WinForm程序 2.引用Ne ...
- 【转】研华Adam6060某段时间后无法连接的问题
配合乙方测试,需连接现场Adam模块.一段时间后发现模块无法连接,网上资料甚少,发现此贴,记录下.以前没有多客户端高频次(其实谈不上高)连接,没有考虑连接释放的问题.另外,官方Demo也没有释放连接. ...
- JavaScript数组知识网络
JavaScript数据类型 基本数据类型 Boolean Null Number String Symbol Undefined 对象数据类型Object Build-in object Array ...
- UVA11806Cheerleaders(容斥)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 题目意思:在m行n列的矩形网格中放k个相同的石子,问有多少中方法?每个格子最多放一 ...
- (原)Ubuntu16中安装cuda toolkit
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5655957.html 参考网址: https://devtalk.nvidia.com/default ...
- 使用LAMP创建基于wordpress的个从博客网站
参考: http://blog.csdn.net/ck_boss/article/details/27866117 一.mysql配置 1.安装mysql yum install mysql-serv ...
- Ubuntu14.04安装PostpreSQL9.3.5记录
安装参考:http://www.postgresql.org/download/linux/ubuntu/ y@y:~$ sudo apt-get install postgresql-9.3 pos ...
- android学习精要
第1章 初识android1.1 android平台概述1.2 android平台体系1.2.1 linux kernel内核层1.2.2 系统运行库libraries和android runtime ...
- Keil中Memory Model和Code Rom Size说明
C51中定义变量时如果省略存储器类型,Keil C51编译系统则会按编译模式SMALL.COMPACT和LARGE所规定的默认存储器类型去指定变量的存储区域,无论什么存储模式都可以声明变量在任何的80 ...
- qsort排序算法
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , ...