admin 管理员组

文章数量: 1086019


2024年3月11日发(作者:sort函数原型)

i++;

p = p->next;

}

return i;

}

/* 查看单链表是否为空 */

bool ListEmpty(LinkList *L)

{

return L->next==NULL;

}

/* 求单链表中某个数据元素值 */

bool GetElem(LinkList *L,int i, ElemType &e)

{

LinkList *p = L;

int j = 0;

while(p!=NULL && j < i)

{

p=p->next;

j++;

}

if(p==NULL)

{

return false;

}

else

{

e = p->data;

return true;

}

}

/* 在单链表中查找元素 */

int LocateElem(LinkList *L,ElemType e)

{

LinkList *p = L;

int i = 0;

while(p!=NULL && p->data!=e)

{

p = p->next;

i++;

}

if(p==NULL)

{

return 0;

}

else

{

return i;

}

}

/* 删除单链表中第 i 个元素*/

bool ListDelete(LinkList *&L,int i,ElemType &e)

{

int j = 0;

LinkList *p = L, *q;

while(p!=NULL && j < i - 1)

{

p = p->next;

j++;

}

if(p==NULL)

return false;

else

{

q = p->next;

if(q==NULL)

return false;

e = q->data;

p->next = q->next;

free(q);

return true;

}

}

/* 删除单链表 */

void DestroyList(LinkList *&L)

{

LinkList *p = L;

LinkList *q = p->next;

while(q!=NULL)

{

free(p);

p = q;

q = p->next;

}

free(p);

}

void CreateListR(LinkList *&L,ElemType e[],int n)

{

InitList(L);

int i;

for(i = 0;i < n; ++i)

{

if(!LocateElem(L,e[i]))

ListInsert(L,i+1,e[i]);

}

}

void InsterSect(LinkList *a,LinkList *b,LinkList *&c)

{

DestroyList(c);

InitList(c);

LinkList *p = a->next;

int i = 0;

while(p!=NULL)

{

if(LocateElem(b,p->data))

ListInsert(c,++i,p->data);

p = p->next;

}

}

void Subs(LinkList *a,LinkList *b,LinkList *&c)

{

DestroyList(c);

InitList(c);

LinkList *p = a->next;

int i = 0;

while(p!=NULL)

{

if(!LocateElem(b,p->data))

ListInsert(c,++i,p->data);

p = p->next;

}

}

void Union(LinkList *a,LinkList *b,LinkList *&c)

{

InitList(c);

LinkList *p = a->next;

LinkList *q = b->next;

int k = 0;

while(p!=NULL && q!=NULL)

{

if(p->data < q->data)

{

ListInsert(c,k+1,p->data);

p = p->next;

k++;

}

else if(p->data == q->data)

{

ListInsert(c,k+1,p->data);

p = p->next;

q = q->next;

k++;

}

else

{

ListInsert(c,k+1,q->data);

q = q->next;

k++;

}

}

while(p!=NULL)

{

ListInsert(c,k+1,p->data);

p = p->next;

k++;

}

while(q!=NULL)

{

ListInsert(c,k+1,q->data);

q = q->next;

k++;

}

///cout<<"hehe"<

}

void sort(LinkList *&L)

{

LinkList *p , *pre, *q, *k;

InitList(p);

int i = 0;

char c;

while(!ListEmpty(L))

{

pre = L ->next;

c = pre->data;

while(pre!=NULL)

{

if(c>=pre->data)

c = pre->data;

pre = pre->next;

}

ListInsert(p,++i,c);

int tag = LocateElem(L,c);

ListDelete(L,tag,c);

}

L = p;

}

int main( )

{

LinkList *ha, *hb, *hc;

ElemType a[]={'c','a','e','h'};

ElemType b[]={'f','h','b','g','d','a'};

printf("集合的运算如下n");

CreateListR(ha,a,4);

CreateListR(hb,b,6);

printf("原 集 合 A: "); DispList(ha);

printf("原 集 合 B: "); DispList(hb);

sort(ha);

sort(hb);

printf("有序集合A:"); DispList(ha);

printf("有序集合B:"); DispList(hb);

Union(ha,hb,hc);

printf("集合的并C:"); DispList(hc);

InsterSect(ha,hb,hc);

printf("集合的交C:"); DispList(hc);

Subs(ha,hb,hc);

printf("集合的差C:"); DispList(hc);

DestroyList(ha);

DestroyList(hb);

DestroyList(hc);

return 0;

}


本文标签: 单链 表中 集合