/*
集合A包含集合B中不重复的元素
思路:
已知一个"纯集合"B,试构造一个集合 A,使 A 中只包含 B 中所有值各不相同的数据元素。
*/
#include <iostream>
#include <cstdlib>
using namespace std;
const int flag = -1;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}*LinkList;
void List_TailInit(LinkList &L){
int x;
LinkList r;
L = (LinkList)malloc(sizeof(LNode));
r = L;
while(cin>>x && x!=flag){
LinkList s = (LinkList)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
}
r->next = NULL;
}
void InitList(LinkList &L){
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
}
bool ListEmpty(LinkList L){
if(L->next==NULL)
return true;
return false;
}
void ListDelete(LinkList &L, int i, ElemType &e){
int loc;
LinkList s, p = L;
for(loc=1; loc<i; loc++){ //找到第i-1个元素
p = p->next;
}
s = p->next;
e = s->data;
p->next = s->next;
free(s);
}
void ListInsert(LinkList &L, int i, ElemType e){
LinkList s, p = L;
while(p->next)
p = p->next;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = NULL;
p->next = s;
}
void DestroyList(LinkList &L){
LinkList p;
for(p=L->next; p; p=L->next){
L->next = p->next;
free(p);
}
}
int ListLength(LinkList L){
int len=0;
LinkList p = L->next;
while(p){
len++;
p = p->next;
}
return len;
}
void printList(LinkList L)
{
LinkList p = L->next;
while(p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void GetElem(LinkList L, int i, ElemType &e){
int j = 1;
LinkList p = L->next;
while(j!=i){
p = p->next;
j++;
}
if(j==i)
e = p->data;
else
e = flag;
}
int LocateElem(LinkList L, ElemType e){//system("pause");
int i;
LinkList p = L->next;
for(i=1; p; i++){
if(p->data == e)
return i;
p = p->next;
}
return 0;
}
void purge(LinkList &LA, LinkList LB)
{ // 创造线性表LA,使其只包含LB中所有值不相同的数据元素,算法不改变线性表LB
InitList(LA); //创建一个空的线性表LA
int La_len = 0;
int Lb_len = ListLength(LB); // 求线性表 LB 的长度
int e;
for (int i = 1; i <= Lb_len; i++)// 处理 LB 中每个元素
{
GetElem(LB, i, e); // 取LB中第 i 个数据赋给 e
// 当 LA 中没有和 e 值相同的数据元素时进行插入
if (!LocateElem(LA, e))
ListInsert(LA, ++La_len, e);
} // for
} // purge
int main(){
LinkList A, B;
List_TailInit(B);
purge(A, B);
printList(A);
return 0;
}
提取单链表中不重复的元素
最新推荐文章于 2022-05-13 04:22:22 发布