📄 sets.c
字号:
rSet->FirstElmt = Min (rSet->FirstElmt, rElmt); rSet->LastElmt = Max (rSet->LastElmt , rElmt); }void Exclude#if defined __STDC__ | defined __cplusplus (tSet * Set, int Elmt)#else (Set, Elmt) tSet * Set; int Elmt;#endif { register tSet * rSet = Set; register int rElmt = Elmt; rSet->BitsetPtr [rElmt / BitsPerBitset] &= ~ (1L << (rElmt & MaskBitsPerBitset)); rSet->Card = NoCard; if (rElmt == rSet->FirstElmt && rElmt < rSet->MaxElmt) rSet->FirstElmt ++; if (rElmt == rSet->LastElmt && rElmt > 0) rSet->LastElmt --; }int Card#if defined __STDC__ | defined __cplusplus (tSet * Set)#else (Set) tSet * Set;#endif { register tSet * rSet = Set; if (rSet->Card == NoCard) { register int i, n; register int last = rSet->LastElmt; n = 0; for (i = rSet->FirstElmt; i <= last; i ++) { if (IsElement (i, rSet)) n ++; } rSet->Card = n; } return rSet->Card; } int Minimum#if defined __STDC__ | defined __cplusplus (tSet * Set)#else (Set) tSet * Set;#endif { register tSet * rSet = Set; register int i; register int last = rSet->LastElmt; for (i = rSet->FirstElmt; i <= last; i ++) { if (IsElement (i, rSet)) { rSet->FirstElmt = i; return i; } } return 0; } int Maximum#if defined __STDC__ | defined __cplusplus (tSet * Set)#else (Set) tSet * Set;#endif { register tSet * rSet = Set; register int i; register int first = rSet->FirstElmt; for (i = rSet->LastElmt; i >= first; i --) { if (IsElement (i, rSet)) { rSet->LastElmt = i; return i; } } return 0; } int Extract#if defined __STDC__ | defined __cplusplus (tSet * Set)#else (Set) tSet * Set;#endif { register int i = Minimum (Set); Exclude (Set, i); return i; }rbool IsSubset#if defined __STDC__ | defined __cplusplus (tSet * Set1, tSet * Set2)#else (Set1, Set2) tSet * Set1; tSet * Set2;#endif { register tSet * rSet1 = Set1; register int i = rSet1->LastBitset + 1; register BITSET * s1 = rSet1->BitsetPtr; register BITSET * s2 = Set2->BitsetPtr; do { if (* s1 ++ & ~ * s2 ++) return rfalse; } while (-- i); return rtrue; }rbool IsEqual#if defined __STDC__ | defined __cplusplus (tSet * Set1, tSet * Set2)#else (Set1, Set2) tSet * Set1; tSet * Set2;#endif { register tSet * rSet1 = Set1; register int i = rSet1->LastBitset + 1; register BITSET * s1 = rSet1->BitsetPtr; register BITSET * s2 = Set2->BitsetPtr; do { if (* s1 ++ != * s2 ++) return rfalse; } while (-- i); return rtrue; } rbool IsEmpty#if defined __STDC__ | defined __cplusplus (tSet * Set)#else (Set) tSet * Set;#endif { register tSet * rSet = Set; if (rSet->FirstElmt <= rSet->LastElmt) { register int i = rSet->LastBitset + 1; register BITSET * s1 = rSet->BitsetPtr; do { if (* s1 ++ != 0) return rfalse; } while (-- i); } return rtrue; } rbool Forall#if defined __STDC__ | defined __cplusplus (tSet * Set, rbool (* Proc) (int))#else (Set, Proc) tSet * Set; rbool (* Proc) ();#endif { register tSet * rSet = Set; register int i; register int last = rSet->LastElmt; for (i = rSet->FirstElmt; i <= last; i ++) { if (IsElement (i, rSet) && ! CALL(Proc) (i)) return rfalse; } return rtrue; } rbool Exists#if defined __STDC__ | defined __cplusplus (tSet * Set, rbool (* Proc) (int))#else (Set, Proc) tSet * Set; rbool (* Proc) ();#endif { register tSet * rSet = Set; register int i; register int last = rSet->LastElmt; for (i = rSet->FirstElmt; i <= last; i ++) { if (IsElement (i, rSet) && CALL(Proc) (i)) return rtrue; } return rfalse; } rbool Exists1#if defined __STDC__ | defined __cplusplus (tSet * Set, rbool (* Proc) (int))#else (Set, Proc) tSet * Set; rbool (* Proc) ();#endif { register tSet * rSet = Set; register int i, n; register int last = rSet->LastElmt; n = 0; for (i = rSet->FirstElmt; i <= last; i ++) { if (IsElement (i, rSet) && CALL(Proc) (i)) n ++; } return n == 1; }void Assign#if defined __STDC__ | defined __cplusplus (tSet * Set1, tSet * Set2)#else (Set1, Set2) tSet * Set1; tSet * Set2;#endif { register tSet * rSet1 = Set1; register int i = rSet1->LastBitset + 1; register BITSET * s1 = rSet1->BitsetPtr; register BITSET * s2 = Set2->BitsetPtr; register tSet * rSet2 = Set2; do {* s1 ++ = * s2 ++;} while (-- i); rSet1->Card = rSet2->Card; rSet1->FirstElmt = rSet2->FirstElmt; rSet1->LastElmt = rSet2->LastElmt; }void AssignElmt#if defined __STDC__ | defined __cplusplus (tSet * Set, int Elmt)#else (Set, Elmt) tSet * Set; int Elmt;#endif { register tSet * rSet = Set; register int rElmt = Elmt; AssignEmpty (rSet); Include (rSet, rElmt); rSet->Card = 1; rSet->FirstElmt = rElmt; rSet->LastElmt = rElmt; }void AssignEmpty#if defined __STDC__ | defined __cplusplus (tSet * Set)#else (Set) tSet * Set;#endif { register tSet * rSet = Set; register int i = rSet->LastBitset + 1; register BITSET * s1 = rSet->BitsetPtr; do {* s1 ++ = 0;} while (-- i); rSet->Card = 0; rSet->FirstElmt = rSet->MaxElmt; rSet->LastElmt = 0; }void ForallDo#if defined __STDC__ | defined __cplusplus (tSet * Set, void (* Proc) (int))#else (Set, Proc) tSet * Set; void (* Proc) ();#endif { register tSet * rSet = Set; register int i; register int last = rSet->LastElmt; for (i = rSet->FirstElmt; i <= last; i ++) { if (IsElement (i, rSet)) CALL(Proc) (i); } }void ReadSet#if defined __STDC__ | defined __cplusplus (FILE * File, tSet * Set)#else (File, Set) FILE * File; tSet * Set;#endif {#ifndef _USRDLL register tSet * rSet = Set; long i; int card = 0; while (fgetc (File) != '{'); AssignEmpty (rSet); for (;;) { if (fgetc (File) == '}') break; (void) fscanf (File, "%ld", & i); Include (rSet, (short) i); card ++; } rSet->Card = card;#endif }static FILE * g;void PrintElmt#if defined __STDC__ | defined __cplusplus (int Elmt)#else (Elmt) int Elmt;#endif { (void) fprintf (g, " %d", Elmt); }void WriteSet#if defined __STDC__ | defined __cplusplus (FILE * File, tSet * Set)#else (File, Set) FILE * File; tSet * Set;#endif { g = File; (void) fprintf (File, "{"); ForallDo (Set, PrintElmt); (void) fprintf (File, "}"); }void InitSets#if defined __STDC__ | defined __cplusplus (void)#else ()#endif { }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -