数据结构——求集合(单链表)的并、交和差运算:

数据结构——求集合(单链表)的并、交和差运算:求集合 用单链表表示 的并 交和差运算 问题描述 该算法的设计 要求运行结果如下所示 包含三种排序 集合的运算如下 原集合 A caeh 原集合 B fhbgda 有序集合 A aceh 有序集合 B abdfgh 集合的并 C abcdefgh 集合的交 C ah 集合的差 C ce include

求集合(用单链表表示)的并、交和差运算:
问题描述:该算法的设计,要求运行结果如下所示:
(包含三种排序)

集合的运算如下:
原 集 合A: c a e h
原 集 合B: f h b g d a
有序集合A: a c e h
有序集合B: a b d f g h
集合的并C: a b c d e f g h
集合的交C: a h
集合的差C: c e

#include <stdio.h> #include <stdlib.h> #include <string.h> #define OK 1 typedef char elemtype; typedef int Status; typedef struct LNode { 
    elemtype data; struct LNode *next; } LNode,*LinkList; Status InitList(LinkList &L) { 
    L=(LinkList)malloc(sizeof(LNode)); if(!L) exit(-1); L->next=NULL; return OK; } Status ListInsert_L(LinkList &L,int i,elemtype e) { 
    LinkList p=L,q; int j=0; for(; p&&j<i-1; j++) p=p->next; if(p&&j>i-1) return -1; q=(LinkList)malloc(sizeof(LNode)); q->data=e; q->next=p->next; p->next=q; } Status ListPritnt_L(LinkList &L) { 
    LinkList p=L; for(p=p->next; p; p=p->next) { 
    printf("%c ",p->data); } printf("\n"); } Status ListLength(LinkList &L) { 
    int i=0; LinkList p=L->next; while(p) { 
    p=p->next; i++; } return i; } Status ListSort_L1(LinkList &L) { 
    //交换结点的冒泡排序 LinkList p,q,p_prior; int i,j,n; n=ListLength(L); for(i=1; i<n; i++) { 
    p=L->next; q=p->next; p_prior=L; for(j=0; j<n-i; j++) { 
    if((p->data)>(q->data)) { 
    p_prior->next=q; p->next=q->next; q->next=p; //交换后的更新结点情况和没交换时不同 p_prior=q; q=p->next; } else { 
    p_prior=p; p=q; q=q->next; } } } p=q=p_prior=NULL; } Status ListSort_L2(LinkList &L) { 
    //直接交换内部素 LinkList p,q; elemtype temp; int i,j,n; n=ListLength(L); for(i=1; i<n; i++) for(j=0,p=L->next,q=p->next; j<n-i; p=q,q=q->next,j++) { 
    if((p->data)>(q->data)) { 
    temp=p->data; p->data=q->data; q->data=temp; } } p=q=NULL; } void BubbleSort(struct LNode * head) { 
    //https://www.cnblogs.com/darkchii/p/7302412.html struct LNode * p, * q, * tail; tail = NULL; while((head->next->next) != tail) { 
    p = head; q = head->next; while(q->next != tail) { 
    if((q->data) > (q->next->data)) { 
    p->next = q->next; q->next = q->next->next; p->next->next = q; q = p->next; } q = q->next; p = p->next; } tail = q; } } LinkList ListMerge_L(LinkList &L1,LinkList &L2) { 
    //L1,L2有序情况的合并 LinkList p=L1->next,q=L2->next; LinkList L3; int i=1; InitList(L3); while(p&&q) { 
    if(p->data<q->data) { 
    ListInsert_L(L3,i++,p->data); p=p->next; } else if(p->data==q->data) { 
    ListInsert_L(L3,i++,p->data); p=p->next; q=q->next; } else { 
    ListInsert_L(L3,i++,q->data); q=q->next; } } while(p) { 
    ListInsert_L(L3,i++,p->data); p=p->next; } while(q) { 
    ListInsert_L(L3,i++,q->data); q=q->next; } return L3; } LinkList ListIntersect_L(LinkList &L1,LinkList &L2) { 
    LinkList p=L1->next,q=L2->next; LinkList L; int i=1,flag=0; InitList(L); while(p) { 
    while(q) { 
    if(p->data==q->data) { 
    flag=1; break; } q=q->next; } if(flag) { 
    ListInsert_L(L,i++,q->data); } p=p->next; q=L2->next; flag=0; } return L; } LinkList ListDifferent_L(LinkList &L1,LinkList &L2) { 
   //就是把交运算改一下  LinkList p=L1->next,q=L2->next; LinkList L; int i=1,flag=1; InitList(L); while(p) { 
    while(q){ 
    if(p->data==q->data) { 
    flag=0; break; } q=q->next; } if(flag) { 
    ListInsert_L(L,i++,p->data); } p=p->next; q=L2->next; flag=1; } return L; } int main() { 
    elemtype A[10]= { 
   'c','a','e','h'}; elemtype B[10]= { 
   'f','h','b','g','d','a'}; int i; LinkList head1,head2,head3,head4,head5; InitList(head1); InitList(head2); for(i=0; A[i]; i++) { 
    ListInsert_L(head1,i+1,A[i]); } printf("原 集 合A:"); ListPritnt_L(head1); for(i=0; B[i]; i++) { 
    ListInsert_L(head2,i+1,B[i]); } printf("原 集 合B:"); ListPritnt_L(head2); ListSort_L1(head1); ListSort_L2(head2); printf("有序集合A:"); ListPritnt_L(head1); printf("有序集合B:"); ListPritnt_L(head2); head3=ListMerge_L(head1,head2); printf("集合的并C:"); ListPritnt_L(head3); head4=ListIntersect_L(head1,head2); printf("集合的交C:"); ListPritnt_L(head4); head5=ListDifferent_L(head1,head2); printf("集合的差C:"); ListPritnt_L(head5); } 
今天的文章 数据结构——求集合(单链表)的并、交和差运算:分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-01 18:06
下一篇 2025-01-01 18:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98593.html