早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求问一个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分
▼优质解答
答案和解析
//自己写的,测试通过
#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...的网友还看了以下: