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; }
版权声明:本文标题:基于单链表实现集合的交集、并集、差集的运算 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1710160434a560206.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论