日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构源码笔记(C语言):集合的位向量表示

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构源码笔记(C语言):集合的位向量表示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*BitSet.c*/ /*集合的位向量表示:函數實現*/#include <stdio.h> #include <stdlib.h> #define superNum 20 #define sonNum 8/*集合的位向量表示:類型和界面定義*/ typedef struct {int size; /*字符數組的長度*/char * array; /*位向量空間。每一數組元素保存8位。*/ } BitSet;/*空集合的創建*/ BitSet * createEmptySet (int n) { /*創建n位的位向量000...0*/int i;BitSet * s = (BitSet *)malloc(sizeof(BitSet));if (s!=NULL){s->size = (n + 7) / 8;s->array = (char *)malloc(s->size * sizeof(char));if (s->array != NULL){for (i = 0; i < s->size; i++) s->array[i] = '\0';return s; }}return NULL; }/*將值為index的元素插入集合S*/ int insert (BitSet * s, int index) { /*將位向量中下標為index的位置為1*/if (index >= 0 && index>>3 < s->size) {s->array[index >> 3] |= (1 << (index & 07)); return 1; } return 0; }/*將值為index的元素從集合S中刪除*/ int delete(BitSet * s, int index) { /*將位向量中下標為index的位,置為0*/if (index >= 0 && index >> 3 < s->size){s->array[index >> 3] &= ~(1 << (index & 07)); return 1;}return 0; }/*判斷整數index的元素是否屬于集合S*/ int member(BitSet * s, int index) { /*檢查位向量中下標為index的位置是否為1*/if (index >= 0 && index >> 3 < s->size&&(s->array[index >> 3] & (1 << (index & 07))))return 1;return 0; }/*集合與集合的并*/ int union_set(BitSet *s0,BitSet *s1,BitSet *s2) { /*當三個位向量長度相等時返回1,置s2為s0與s1的并;否則返回0。*/int i;if (s0->size != s1->size|| s2->size != s1->size) return 0;for (i = 0; i < s1->size; i++)s2->array[i]=s0->array[i] | s1->array[i];return 1; }/*集合與集合的交*/ int intersection(BitSet * s0, BitSet * s1, BitSet * s2) { /*當三個位向量長度相等時返回1,置s2為s0與s1的交;否則返回0。*/int i;if (s0->size != s1->size|| s2->size != s1->size) return 0;for (i = 0; i < s1->size; i++)s2->array[i]=s0->array[i] & s1->array[i];return 1; }/*集合與集合的差*/ int difference(BitSet * s0, BitSet * s1, BitSet * s2) { /*當三個位向量長度相等時返回1,置s2為s0與s1的差;否則返回0。*/int i;if (s0->size != s1->size|| s2->size != s1->size) return 0;for (i = 0; i < s1->size; i++)s2->array[i]=s0->array[i] & ~s1->array[i];return 1; }void display(BitSet *s,int * super_set) {int i,j;char ch;printf("{");for (i=0; i<s->size; i++) for(j=0;j<8;j++){ ch=s->array[i]>>j;if(ch%2!=0) printf("%d ",super_set[i*8+j]); } printf("}\n\n");}int main() {BitSet *s0,*s1,*s2,*s3,*s4;int i=0,j=0;int superset[superNum]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};int subset[sonNum]={1,2,4,5,7,8,10,19};int othersubset[4]={5,11,14,17};/*空集合的創建*/s0=createEmptySet (superNum);s1=createEmptySet (superNum);s2=createEmptySet (superNum);s3=createEmptySet (superNum);s4=createEmptySet (superNum);//將subset集合存放到存儲結構的數組array中for(i=0;i<superNum;i++){while(j<sonNum){if(subset[j]==superset[i]) {insert(s0, i);break;}j++;}; j=0; }printf("集合S0=");display(s0,superset);/*將值為index的元素從集合S中刪除*/printf("刪除元素后,集合S0=");delete(s0,3);display(s0,superset);/*判斷整數index的元素是否屬于集合S*/if(member(s0, 11))printf("判斷11是該集合的元素\n");else printf("判斷11不是該集合的元素\n");//創建另外一個集合s1j=0;for(i=0;i<superNum;i++){while(j<4){if(othersubset[j]==superset[i]) {insert(s1, i);break;}j++;}; j=0; }printf("集合S1=");display(s1,superset);/*集合與集合的并*/union_set (s0, s1, s2);printf("s0,s1做并后,s2=");display(s2,superset);/*集合與集合的交*/intersection(s0, s1, s3);printf("s0,s1做交后,s3=");display(s3,superset);/*集合與集合的差*/difference(s0, s1, s4);printf("s0,s1做差后,s4=");display(s4,superset);return 0; }

數據結構源碼筆記(C語言描述)匯總:

數據結構源碼筆記(C語言):英文單詞按字典序排序的基數排序

數據結構源碼筆記(C語言):直接插入排序

數據結構源碼筆記(C語言):直接選擇排序

數據結構源碼筆記(C語言):置換-選擇算法

數據結構源碼筆記(C語言):Huffman樹字符編碼

數據結構源碼筆記(C語言):Josephus問題之順序表

數據結構源碼筆記(C語言):Josephus問題之循環鏈接表

數據結構源碼筆記(C語言):多項式合并

數據結構源碼筆記(C語言):二叉樹之葉子結點旋轉銷毀

數據結構源碼筆記(C語言):哈夫曼樹

數據結構源碼筆記(C語言):集合的位向量表示

數據結構源碼筆記(C語言):鏈接隊列

數據結構源碼筆記(C語言):鏈接棧

數據結構源碼筆記(C語言):線性表的單鏈表示

數據結構源碼筆記(C語言):線性表的順序表示

數據結構源碼筆記(C語言):棧的基本操作

數據結構源碼筆記(C語言):中綴表達式

數據結構源碼筆記(C語言):希爾插入排序

數據結構源碼筆記(C語言):索引文件建立和查找

數據結構源碼筆記(C語言):冒泡排序

數據結構源碼筆記(C語言):快速排序

數據結構源碼筆記(C語言):可變長度字符串的快速排序

數據結構源碼筆記(C語言):基數排序

數據結構源碼筆記(C語言):二路歸并排序

數據結構源碼筆記(C語言):堆排序

數據結構源碼筆記(C語言):二叉樹搜索樹Kruskal

數據結構源碼筆記(C語言):二叉搜索樹Prim

數據結構源碼筆記(C語言):最短路徑弗洛伊德算法

數據結構源碼筆記(C語言):深度、廣度優先生成樹

數據結構源碼筆記(C語言):鄰接矩陣轉化鄰接表

數據結構源碼筆記(C語言):統計字符串中出現的字符及其次數

數據結構源碼筆記(C語言):順序查找

數據結構源碼筆記(C語言):哈希表的相關運算算法

數據結構源碼筆記(C語言):分塊法查找

數據結構源碼筆記(C語言):二分查找

數據結構源碼筆記(C語言):二叉樹遍歷

數據結構源碼筆記(C語言):二叉平衡樹的相關操作算法

數據結構源碼筆記(C語言):二叉排序樹的基本操作算法

數據結構源碼筆記(C語言):B樹的相關運算算法

總結

以上是生活随笔為你收集整理的数据结构源码笔记(C语言):集合的位向量表示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。