读书人

C++ 链表 过错 交并差,该如何解决

发布时间: 2012-05-13 16:39:43 作者: rapoo

C++ 链表 过错 交并差
#include <iostream>
#include <algorithm>
using namespace std;

struct linkedList //只比较一维数组
{
char compare;
linkedList *next;
};

linkedList *show(linkedList *head)
{
while(head!=NULL)
{
cout<<head->compare;
head = head->next;
}
return head;
}

linkedList *initList(linkedList *head, char comparearray[], int size)
{
linkedList *pnew, *final; // 工作指针
for (int i=0; i<size; i++)
{
pnew = new linkedList;
pnew->compare = comparearray[i];
if (i==0)
{
head=pnew;
final=pnew;
}
else
{
final->next = pnew;
final = pnew;
}
}
final->next = NULL;
show(head);
return head;
}

/* 抱歉, 我实在想不出如何在不使用辅助空间的前提下,
同时实现交并差的运算的算法....*/

linkedList *setInteraction(linkedList *head1, linkedList *head2) //交集
{
linkedList *newhead, *pnew, *final, *p;
int i = 0;
p = head2;
while (head1!=NULL)
{
head2 = p;
while (head2!=NULL)
{
if (head1->compare == head2->compare)
{
pnew = new linkedList;
pnew->compare = head1->compare;
if(i==0)
{
newhead = final = pnew;
}
else
{
final->next = pnew;
final = pnew;
}
i++;
break;
}
head2 = head2->next;
}
head1 = head1->next;
}

final->next = NULL;
show(newhead);
return newhead;
}

linkedList *setUnion(linkedList *head1, linkedList *head2) // 并集
{
linkedList *newhead, *pnew, *final;//复制集合1
int i=0;
while (head1!=NULL)
{
pnew = new linkedList;
pnew->compare = head1->compare;
if (i==0)
{
newhead=final=pnew;
}
else
{
final->next=pnew;
final = pnew;
}
i++;
head1 = head1->next;
}
final->next = NULL;
linkedList *p=newhead;
while (p!=NULL)
{
while(head2!=NULL)
{

if (p->compare != head2->compare)
{
head2->next = p->next;
p->next = head2;
}
head2 = head2->next;
}
p = p->next;
}
show(newhead);
return newhead;
}

linkedList *setSubtraction(linkedList *head1, linkedList *head2) //差集
{
linkedList *newhead, *pnew, *final;
int i=0;
while (head1!=NULL )
{
while(head2!=NULL)
{

if (head1->compare != head2->compare)
{
pnew = new linkedList;
pnew->compare = head1->compare;
if (i==0)
{
newhead=final=pnew;
}
else
{
final->next = pnew;
final=pnew;
}
}
i++;
head2 = head2->next;
}
head1 = head1->next;

}

final->next = NULL;
show(newhead);
return newhead;
}

void main()
{
linkedList *head1=NULL, *head2=NULL;
char collection1[100];
char collection2[100];
cout<<"\t\t输入两个集合, 按从小到大排序, 进行交集, 并集和差集的运算\n\n";
cout<<"请输入集合1:\n";
cin.getline(collection1, 100);
int length1 = strlen(collection1);
sort(collection1, collection1+length1);
cout<<"\n所输入集合1为:\n";
head1 = initList(head1, collection1, length1);

cout<<"\n\n请输入集合2:\n";
cin.getline(collection2, 100);
int length2 = strlen(collection2);
sort(collection2, collection2+length2);
cout<<"\n所输入集合2为:\n";
head2 = initList(head2, collection2, length2);
while(1)
{
cout<<"\n\t\t输入两个集合,排序, 进行交集, 并集和差集的运算\n\n";


cout<<"输入2, 交集运算\n";
cout<<"输入3, 并集运算\n";
cout<<"输入4, 差集运算\n";
cout<<"输入5, 离开\n";
int select;
cin>>select;
switch (select)
{

case 2:
{
cout<<"交集为:\n";
setInteraction(head1, head2);
cout<<endl;
break;
}
case 3:
{
cout<<"并集为:\n";
setUnion(head1, head2);
cout<<endl;
break;
}
case 4:
{
cout<<"差集为:\n";
setSubtraction(head1, head2);
cout<<endl;
break;
}
case 5:
exit(1);
default:
{
cout<<"输入错了!\n";
cout<<"请输入1~5的数字!\n";
break;
}
}
}
}

[解决办法]
我懂了,不好意思!

今天没时间了,明天再来看!

读书人网 >C++

热点推荐