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的最大公约数 ...
随机推荐
- maven使用笔记一 下载json-lib引发的问题
一.问题描述(IDEA中): 1,在pom.xml中配置了 <dependency> <groupId>net.sf.json-lib</groupId> < ...
- H5本地存储
在HTML5中可以把数据长期存储在客户端,使用的对象就是localStorage. localStorage常用方法有setItem.getItem.removeItem.clear. 下面是一个存储 ...
- POI3.10 根据Excel模版导出数据测试
1:所需jar包 2:Mysql数据库表内容如下: 3:代码结构如下: (1)User.java public class User { private int id; private String ...
- 在Qt中怎样显示ASCII码大于127的字符
前段时间要显示“≤”符号找了挺久没找到方法,后面发现用以下方法可以解决: ushort gd[]={8805,0}; QString gteq=QString::fromUtf16(gd); 得 ...
- Linux下的命令行上网
对于网页浏览器现在大多数人用links/elinks,对了,还有个老牌一点的文本浏览器Lynx,links/elinks也是从Lynx中fork出来的. 以上所说的虽然能字符界面来浏览网页,但是不能显 ...
- SDL显示内存中的图像
<textarea readonly="readonly" name="code" class="c++"> #include ...
- Unix/Linux环境C编程入门教程(36) 初识shell
1.什么是Shell Shell是位为一组,依次代表文件拥有者.同组用户和其他用户的存取权限.通常文件共有3个权限,"r"表示只读:"w"表示可写:&qu ...
- 2014第3周三JS进阶书籍
本来想尝试每天回答或看已解决的3个问题来学习总结今天的知识点,看了下博文里面的问答,在问的和已解决的都提不起兴趣.就看了下知识库里面一些文章,把里面感觉好的段落再摘录一下,为自己再看时备忘. 第一阶段 ...
- 04747_Java语言程序设计(一)_第1章_Java语言基础
二进制0b开头 八进制0开头 十六进制0x开头 package com.jacky; public class Aserver { public static void main(String arg ...
- PHP MySQL 创建数据库和表 之 Create
创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库. 语法 CREATE DATABASE database_name 为了让 PHP 执行上面的语句,我们必须使用 my ...