一、集合操作 用单链表模拟有序集合,实现集合的加入一个元素、删除一个元素、集合的交、并、差运算。
#include
using namespace std;
typedef struct Element{
Element* next;
int value;
}Element,*Link,*Position;
class SortedUnion
{
private:
Link sorted_link;
public :
SortedUnion()
{
//创建单链表的头节点
sorted_link = (Link)malloc(sizeof(Element));
sorted_link->next = NULL;
}
void addValue(int value)
{
Position pos = insertPosition(value);
if(pos!=NULL)
{
Link tmp = (Link)malloc(sizeof(Element));
tmp->value = value;
tmp->next = pos->next;
pos->next = tmp;
}
}
void deleteValue(int value)
{
Position pos,pre=sorted_link;
for(pos=sorted_link->next; pos; pos=pos->next)
{
if(pos->value == value)
{
pre->next = pos->next;
free(pos);
break;
}
pre = pos;
}
}
Position insertPosition(int value)
{
Position pos;
for(pos = sorted_link; pos->next; pos=pos->next)
{
if(pos->next->value > value)
break;
if(pos->next->value == value)
return NULL;
}
return pos;
}
void print()
{
Link ptr;
for(ptr=sorted_link; ptr->next; ptr=ptr->next)
cout
}
friend SortedUnion Intersection(SortedUnion A, SortedUnion B)
{
SortedUnion C;
Position posA = A.sorted_link->next, posB = B.sorted_link->next;
while(posA && posB)
{
if(posA->value value)
posA = posA->next;
else if(posB->value value)
posB = posB->next;
else{
C.addValue(posA->value);
posA = posA->next;
posB = posB->next;
}
}
return C;
}
};
int main()
{
SortedUnion u1,u2,u3;
u1.addValue(2);
u1.addValue(3);
u1.addValue(1);
u1.addValue(4);
u2.addValue(1);
u2.addValue(2);
u3 = Intersection(u1, u2);
u3.print();
}
二、集合操作 用单链表模拟有序集合,实现集合的加入一个元素、删除一个元素、集合的交、并、差运算。
#incluam>
using n;
typedef struct Elem* next;
int va,*Link,*PositdUnion
{
prk sorted_lic :
SortedUnion()
{
//创建单链表的头节点
sorted_link = (Link)malloc();
sorted_link->next = NULL;
}
void addValue(isition pos = ition(value);
ink tmp = (Link)malloc(sizeof(Element));
tmp->value = value;
tmp->next = pos->next;
pos->next = tmp;
}
}
void delete value)
{
Position pos,pre=sorted_link;
for(pos=sorted_link->next; ps->next)
{
if(pos->value == value)
{
pre->next = pos->nexos);
break;
}
pre = pos;
}
}
Position insertPosition(int valion pos;
for(pos = sorted_link; pos->ns->next)
{
if(pos->next->value > value)
break;
if(>value == value)
return NULL;
}
return pos;
}
v
{
Link ptr;
for(ptr=sorted_xt; ptr=ptrtr->next->value