早教吧作业答案频道 -->其他-->
求问一个C++VC6.015、用不带辅助表元的有序整数链表表示整数集合,分别编写已知两个集合求集合和(S=S1∪S2)、集合差(S1=S1-S2)、集合交(S1=S1∩S2)的函数.运算结果产生一个新链表.求具
题目详情
求问一个C++ VC6.0
15、用不带辅助表元的有序整数链表表示整数集合,分别编写已知两个集合求集合和(S=S1∪S2)、集合差(S1=S1-S2)、集合交(S1=S1∩S2)的函数.运算结果产生一个新链表.
求具体的源代码 C++(vc++6.0) 如果准确额外加50分
15、用不带辅助表元的有序整数链表表示整数集合,分别编写已知两个集合求集合和(S=S1∪S2)、集合差(S1=S1-S2)、集合交(S1=S1∩S2)的函数.运算结果产生一个新链表.
求具体的源代码 C++(vc++6.0) 如果准确额外加50分
▼优质解答
答案和解析
//自己写的,测试通过
#include
#include
#include
#include
//无表头的链表实现集合的并,差,交
typedef struct Node_
{
int data;
struct Node_* next;
}Node,LinkList;
//释放链表
void Destructor(LinkList* list)
{
Node* curr = list;
while(curr)
{
Node* t = curr->next;
free(curr);
curr = t;
}
}
//在链表(集合)中添加一个元素,自动有序
void Append(LinkList** list, int value)
{
if (!(*list))
{
(*list)=(LinkList*) malloc(sizeof(LinkList));
(*list)->next=NULL;
(*list)->data=value;
return;
}
Node* curr = (*list)->next;
Node* p=(*list);
if (value>(*list)->data)
{
while (curr)
{
if (value > curr->data)
{
p=curr;
curr = curr->next;
}
else if (value == curr->data) return;
else break;
}
Node* t = (Node*)malloc(sizeof(Node));
t->data = value;
t->next = curr;
p->next = t;
}
else if (value==(*list)->data)
{
return;
}
else
{
Node* t = (Node*)malloc(sizeof(Node));
int temp=(*list)->data;
(*list)->data=value;
(*list)->next=t;
t->data=temp;
t->next=NULL;
}
}
void Show(LinkList* list)
{
Node* curr = list;
for (; curr; curr = curr->next)
printf("%d->", curr->data);
printf("NULL\n");
}
LinkList* plus(LinkList *l, LinkList *r)
{
LinkList* it=NULL;
Node* p = l, * q = r;
for (;p && q;p = p->next, q = q->next)
{
int d1 = p->data, d2 = q->data;
if (d1 == d2)
{
Append(&it, d1);
}
else
{
Append(&it, d1);
Append(&it, d2);
}
}
for (;p;Append(&it, p->data), p = p->next);
for (;q;Append(&it, q->data), q = q->next);
return it;
}
LinkList* minus(LinkList *l, LinkList *r)
{
LinkList *it=NULL;
Node* p = l, * q = r;
for (;p && q;)
{
int d1 = p->data, d2 = q->data;
if (d1 < d2)
{
Append(&it, d1);
p = p->next;
}
else if (d1 == d2)
{
p = p->next, q = q->next;
}
else
{
q = q->next;
}
}
for (;p;Append(&it, p->data), p = p->next);
return it;
}
LinkList* intersection(LinkList *l, LinkList *r)
{
LinkList *it=NULL;
Node* p = l, * q = r;
for (;p && q;)
{
int d1 = p->data, d2 = q->data;
if (d1 < d2) p = p->next;
else if (d1 > d2) q = q->next;
if (d1 == d2) Append(&it, d1), p = p->next, q = q->next;
}
return it;
}
int main(int argc, char* argv[])
{
LinkList *s1=NULL, *s2=NULL, *result=NULL;
Append(&s1, 2),Append(&s1, 3),Append(&s1, 5),Append(&s1, 6);
Append(&s2, 3),Append(&s2, 4),Append(&s2, 6),Append(&s2, 8);
result = plus(s1, s2);
Show(result);
Destructor(result);
result=NULL;
result = minus(s1, s2);
Show(result);
Destructor(result);
result=NULL;
result = intersection(s1, s2);
Show(result);
return 0;
}
#include
#include
#include
#include
//无表头的链表实现集合的并,差,交
typedef struct Node_
{
int data;
struct Node_* next;
}Node,LinkList;
//释放链表
void Destructor(LinkList* list)
{
Node* curr = list;
while(curr)
{
Node* t = curr->next;
free(curr);
curr = t;
}
}
//在链表(集合)中添加一个元素,自动有序
void Append(LinkList** list, int value)
{
if (!(*list))
{
(*list)=(LinkList*) malloc(sizeof(LinkList));
(*list)->next=NULL;
(*list)->data=value;
return;
}
Node* curr = (*list)->next;
Node* p=(*list);
if (value>(*list)->data)
{
while (curr)
{
if (value > curr->data)
{
p=curr;
curr = curr->next;
}
else if (value == curr->data) return;
else break;
}
Node* t = (Node*)malloc(sizeof(Node));
t->data = value;
t->next = curr;
p->next = t;
}
else if (value==(*list)->data)
{
return;
}
else
{
Node* t = (Node*)malloc(sizeof(Node));
int temp=(*list)->data;
(*list)->data=value;
(*list)->next=t;
t->data=temp;
t->next=NULL;
}
}
void Show(LinkList* list)
{
Node* curr = list;
for (; curr; curr = curr->next)
printf("%d->", curr->data);
printf("NULL\n");
}
LinkList* plus(LinkList *l, LinkList *r)
{
LinkList* it=NULL;
Node* p = l, * q = r;
for (;p && q;p = p->next, q = q->next)
{
int d1 = p->data, d2 = q->data;
if (d1 == d2)
{
Append(&it, d1);
}
else
{
Append(&it, d1);
Append(&it, d2);
}
}
for (;p;Append(&it, p->data), p = p->next);
for (;q;Append(&it, q->data), q = q->next);
return it;
}
LinkList* minus(LinkList *l, LinkList *r)
{
LinkList *it=NULL;
Node* p = l, * q = r;
for (;p && q;)
{
int d1 = p->data, d2 = q->data;
if (d1 < d2)
{
Append(&it, d1);
p = p->next;
}
else if (d1 == d2)
{
p = p->next, q = q->next;
}
else
{
q = q->next;
}
}
for (;p;Append(&it, p->data), p = p->next);
return it;
}
LinkList* intersection(LinkList *l, LinkList *r)
{
LinkList *it=NULL;
Node* p = l, * q = r;
for (;p && q;)
{
int d1 = p->data, d2 = q->data;
if (d1 < d2) p = p->next;
else if (d1 > d2) q = q->next;
if (d1 == d2) Append(&it, d1), p = p->next, q = q->next;
}
return it;
}
int main(int argc, char* argv[])
{
LinkList *s1=NULL, *s2=NULL, *result=NULL;
Append(&s1, 2),Append(&s1, 3),Append(&s1, 5),Append(&s1, 6);
Append(&s2, 3),Append(&s2, 4),Append(&s2, 6),Append(&s2, 8);
result = plus(s1, s2);
Show(result);
Destructor(result);
result=NULL;
result = minus(s1, s2);
Show(result);
Destructor(result);
result=NULL;
result = intersection(s1, s2);
Show(result);
return 0;
}
看了 求问一个C++VC6.015...的网友还看了以下:
数学提双曲线的!求适合条件的双曲线的标准方程,1..a=4b=3焦点在x轴上,2.焦点为(0,-6 2020-05-13 …
函数f(x)=(tan2x)/tanx的定义域 关于最后一步的整合问题!2x≠kπ+π/2……(1 2020-05-15 …
下面是清代文学家俞樾临终前撰写的自挽联的部分词句,顺序已被打乱,请将它们按对联的要求整合后,与前面 2020-05-16 …
下面是清代文学家俞樾临终前撰写的自挽联的部分词句,顺序已被打乱,请将它们按对联的要求整合后,与前面 2020-05-16 …
求问一个C++VC6.015、用不带辅助表元的有序整数链表表示整数集合,分别编写已知两个集合求集合 2020-05-17 …
高压少油断路器需调试的共同内容有:缓冲器的调整,合闸限位装置的调整,行程和转角的调整。() 2020-05-29 …
《高中数学思想方法集锦》疑难句求解近来看到一帖《高中数学思想方法集锦》,惊为天人,相见恨晚.可惜有 2020-06-19 …
质子泵是一种逆浓度梯度转运氢离子通过膜的膜整合糖蛋白,它利用催化ATP水解释放的能量驱动H+从胃壁 2020-06-23 …
这句话用英文怎么写,活到现在,第一次把散乱的心整合起来,都交给了一个人.从此这颗心里再也装不下别人 2020-07-05 …
当前,各地旅游局、企事业单位都有面向国内外积极宣传自己的诉求。央视《中国行》栏目以国情为基础,将这 2020-07-15 …