资源描述:
《双向链表实现集合的并交差》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验二:双向链表的创建,以及用双向链表实现集合见得并交和差#include#includetypedefstructDuLNode{intdata;structDuLNode*prior;structDuLNode*next;}DuLNode,*DuLinkList;//建立空链表,链表头指针的data中存放了链表元素的个数。voidInitList(DuLNode**p){*p=(DuLNode*)malloc(sizeof(DuLNode));(*p)->next=(*p)->prio
2、r=*p;(*p)->data=0;}//在空表的基础上,创建有多个元素的链表。voidcreate_list(DuLNode**p){inti,n,m;DuLinkLista,b;a=*p;printf("输入需要输入的元素的个数:");scanf("%d",&n);printf("输入需要输入的元素:");for(i=0;idata=m;a->next=b;b->next=*p;b->prior=
3、a;(*p)->prior=b;a=b;(*p)->data++;}}DuLinkListGetElemP(DuLinkListh,inti){intj;DuLinkListp=h;for(j=1;j<=i;j++)p=p->next;returnp;}voidListinsert(DuLNode*m,inti,inte){DuLinkListp,q;printf("在第%d个元素前插入元素%d",i,e);if(m->data==0){p=(DuLinkList)malloc(sizeof(DuLNode));p->da
4、ta=e;m->next=p;p->prior=m;m->prior=p;p->next=m;m->data++;}else{q=(DuLinkList)malloc(sizeof(DuLNode));p=(DuLinkList)malloc(sizeof(DuLNode));q=GetElemP(m,i);p->data=e;p->prior=q->prior;q->prior->next=p;p->next=q;q->prior=p;m->data++;}}voidListDelete(DuLinkListL,inti){
5、printf("删除第%d个元素",i);DuLinkListp;p=GetElemP(L,i);p->prior->next=p->next;p->next->prior=p->prior;L->data--;free(p);}voidDisplay(DuLinkListL){DuLinkListp;if(L->data==0)printf("该集合为空");else{printf("输出该集合的元素");for(p=L->next;p!=L;){printf("%dt",p->data);p=p->next;}}
6、printf("该集合的元素个数:%d",L->data);}voidUnion(DuLinkList&la,DuLinkListlb)//求两个集合la,lb的并将结果保存在la中。{inta,b,i,j,m;DuLinkListp,q;a=la->data;b=lb->data;p=lb->next;printf("对两个集合并操作:");for(i=1;i<=b;i++){q=la->next;for(j=1;j<=a;j++){if(p->data!=q->data){q=q->next;m=0;}else
7、{m=1;break;}}if(m==0){Listinsert(la,la->data+1,p->data);}p=p->next;}}voidintersect(DuLinkList&lc,DuLinkListla,DuLinkListlb)//求两个集合la和lb的交集将结果保存在lc中。{inta,b,i,j;DuLinkListp,q;a=la->data;b=lb->data;p=lb->next;for(i=1;i<=b;i++){q=la->next;for(j=1;j<=a;j++){if(p->data==
8、q->data){Listinsert(lc,1,p->data);break;}else{q=q->next;}}p=p->next;}}voiddecrease(DuLinkList&ld,DuLinkListla,DuLinkListlb)//求集合la-lb的差并将结