(C++)数据结构实验(1) —— 用链表实现集合的交并差
第二版
增加了从txt中读取内容。
#include <iostream>
#include <string>
using namespace std;
#include <fstream>
#define BOX 100
#define TRUE 1
#define FALSE 0
//可以用于类似于检测卷面相似度 或者 答题卡答案的比对
struct LNode
{
char data;
struct LNode* next;
};
LNode* createList()
{
int n;
int i = 0;
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;
if (p->data >= 97 && p->data <= 122)
{
pre->next = p;
pre = p;
p->next = NULL;
}
else
{
cout << "请输入小写英文字母\n";
i--;
}
}
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->