链表实现集合的交并差
第一版
#include <iostream>
#include <string>
using namespace std;
struct LNode
{
char data;
struct LNode *next;
};
LNode* createList()
{
int n;
LNode* head = new LNode;
LNode* pre = head;
cout << "请输入字符串的字母个数" << endl;
cin >> n;
while(n<=0)
{
cout << "请输入一个大于零的数" << endl;
cin >> n;
}
cout << "请输入字符串" << endl;
for (int i = 0; i < n; i++)
{
LNode* p = new LNode;
cin >> p->data;
pre->next = p;
pre = p;
p->next = NULL;
}
return head;
}
void display(LNode* head)
{
LNode* p = head->next;
while(p != NULL)
{
cout << p->data;
p = p->next;
cout << " ";
}
cout << endl;
}
void sort(LNode* head)
{
LNode* cur = NULL;
LNode* tag = NULL;
cur = head;
while(cur != tag)
{
while(cur->next != tag)
{
if(cur->data > cur->next->data )
{
char tmp = cur->data ;
cur->data = cur->next->data ;
cur->next->data = tmp;
}
cur = cur->next ;
}
tag = cur;
cur = head ;
}
}
void erase(LNode *head)
{
LNode *p = head->next;
if(!p)
return;
while(p != NULL)
{
LNode *q = p;
LNode *temp;
while(q != NULL && q->next != NULL)
{
if (q->next->data == p->data)
{
temp = q->next;
q->next = temp->next;
delete temp;
}
else q=q->next;
}
p = p->next;
}
}
void JiaoJi(LNode* head1,LNode* head2)
{
LNode* p = head1->next;
LNode* q = head2->next;
while(p != NULL && q != NULL)
{
if(p->data == q->data )
{
cout << p->data << " ";
q = q->next;
p = p->next;
}
else if(p->data < q->data)
{
p = p->next;
}
else if(p->data > q->data)
{
q = q->next;
}
}
}
void BingJi(LNode* head1,LNode* head2)
{
LNode* p = head1->next;
LNode* q = head2->next;
while(p != NULL && q != NULL)
{
if(p->data < q->data)
{
cout << p->data << " ";
p = p->next;
}
else if (p->data > q->data)
{
cout << q->data <<" ";
q = q->next;
}
else if (p->data == q->data)
{
cout << p->data << " ";
q = q->next;
p = p->next;
}
}
while(p != NULL)
{
cout << p->data << " ";
p = p->next;
}
while(q != NULL)
{
cout << q->data <<" ";
q = q->next;
}
}
void ChaJi(LNode* head1,LNode* head2)
{
LNode* p = head1->next;
LNode* q = head2->next;
while(p != NULL && q != NULL)
{
if(p->data < q->data)
{
cout << p->data << " ";
p = p->next;
}
else if (p->data > q->data)
{
cout << q->data <<" ";
q = q->next;
}
else if (p->data == q->data)
{
q = q->next;
p = p->next;
}
}
while(p != NULL)
{
cout << p->data << " ";
p = p->next;
}
while(q != NULL)
{
cout << q->data <<" ";
q = q->next;
}
}
int main()
{
while(1)
{
LNode *La = createList();
LNode *Lb = createList();
sort(La);
sort(Lb);
erase(La);
erase(Lb);
int choice;
cout << "——————————————————————" << endl;
cout << endl;
cout << " 请输入对应数字以执行操作:" << endl;
cout << " 1.执行AB取并集操作" << endl;
cout << " 2.执行AB取交集操作" << endl;
cout << " 3.执行AB作差操作" << endl;
cout << endl;
cout << "——————————————————————" << endl;
cin >> choice;
switch(choice)
{
case 1:
BingJi(La,Lb);
system("pause");
getchar();
system("cls");
break;
case 2:
JiaoJi(La,Lb);
system("pause");
getchar();
system("cls");
break;
case 3:
ChaJi(La,Lb);
system("pause");
getchar();
system("cls");
break;
}
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-43799.html