生活随笔
收集整理的這篇文章主要介紹了
(C语言)链表的实现集合的相关操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文鏈接:https://blog.csdn.net/kobe_jr/article/details/80543611
集合的特征:確定性/ 互異性/ 無序性。
常見的操作:1、查找集合中是否包含這個數據元素:Contains();
2、添加一個新成員數據,集合中不能存在這個元素。AddMember();
3、刪除指定元素, 找到這個元素, 刪除;如果沒找到,則提示沒找到,返回0(表示false)。Delete();
4、合并兩個集合,不能有相同的元素。
5、求交集,找相同的元素。
6、求差集,例如:A{1, 2, 3}。B{2,4}。那么A相對B的差集就是{1,3}。
參考代碼:
#include<stdio.h>#include<stdlib.h> typedef int elementType;typedef struct node{elementType data; struct node *next;}SetNode; typedef struct{SetNode *first, *last;}LinkSet; bool Contains(LinkSet &ls, elementType x){ SetNode *p = ls.first->next; while(p != NULL && p->data < x){p = p->next;} if(p != NULL && p->data == x){ return 1;} else return 0;} int addMember(LinkSet &ls, elementType x){ SetNode *p = ls.first->next; SetNode *pre = ls.first; while(p != NULL && p->data < x){pre = p; p = p->next;} if(p != NULL && p->data == x) return 0; SetNode *s = (SetNode *)malloc(sizeof(SetNode)); s->data = x;s->next = p;pre->next = s; if(!p) ls.last = s; return 1; } int deleteMember(LinkSet &ls, elementType x){ SetNode *p = ls.first->next, *pre = ls.first; while(p != NULL && p->data < x){pre = p; p = p->next;} if(p != NULL & p->data == x){pre->next = p->next; if(p == ls.last) ls.last = pre; free(p); return 1;} else return 0; } void merge(LinkSet &lsA, LinkSet &lsB, LinkSet &lsC){SetNode *pa = lsA.first->next, *pb = lsB.first->next; SetNode *pc = lsC.first, *p; while(pa != NULL && pb != NULL){ if(pa->data < pb->data){ pc->next = (SetNode *)malloc(sizeof(SetNode)); pc->next->data = pa->data; pa = pa->next; } else if(pa->data > pb->data){pc->next = (SetNode *)malloc(sizeof(SetNode)); pc->next->data = pb->data; pb = pb->next; } else if(pa->data == pb->data){pc->next = (SetNode *)malloc(sizeof(SetNode)); pc->next->data = pa->data; pa = pa->next;pb = pb->next; } pc = pc->next;} p = (pa != NULL ) ? pa : pb; while(p != NULL){pc->next = (SetNode *)malloc(sizeof(SetNode)); pc->next->data = p->data; pc = pc->next; p = p->next; } pc->next = NULL;lsC.last = pc; } void print(LinkSet &ls){SetNode *p = ls.first; while(p->next != NULL){ printf("%d ", p->next->data);p = p->next;} printf("\n");}int main(){ LinkSet la, lb, lc; la.first = (SetNode *)malloc(sizeof(SetNode)); la.first->next = NULL; lb.first = (SetNode *)malloc(sizeof(SetNode)); lb.first->next = NULL; lc.first = (SetNode *)malloc(sizeof(SetNode)); lc.first->next = NULL; addMember(la, 1);addMember(la, 2);addMember(la, 3);addMember(la, 4);addMember(la, 5); print(la); printf("%d\n", Contains(la, 5)); printf("%d\n", Contains(la, 6)); addMember(lb, 1);addMember(lb, 2);addMember(lb, 3);addMember(lb, 7);addMember(lb, 8); print(lb); deleteMember(lb, 3); print(lb); merge(la, lb, lc); print(lc); return 0; }
以上就是這篇的主要內容,歡迎您提出意見。謝謝!讓我們共同進步!
總結
以上是生活随笔為你收集整理的(C语言)链表的实现集合的相关操作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。