Put the Set class into its own namespace
/* C# A Beginner's Guide By Schildt Publisher: Osborne McGraw-Hill ISBN: 0072133295 */ using System; using MyTypes.Set; /* Project 12-1 Put the Set class into its own namespace. */ namespace MyTypes.Set { class Set { char[] members; // this array holds the set int len; // number of members // Construct a null set. public Set() { len = 0; } // Construct an empty set of a given size. public Set(int size) { members = new char[size]; // allocate memory for set len = 0; // no members when constructed } // Construct a set from another set. public Set(Set s) { members = new char[s.len]; // allocate memory for set for(int i=0; i < s.len; i++) members[i] = s[i]; len = s.len; // number of members } // Implement read-only Length property. public int Length { get{ return len; } } // Implement read-only indexer. public char this[int idx]{ get { if(idx >= 0 & idx < len) return members[idx]; else return (char)0; } } /* See if an element is in the set. Return the index of the element or -1 if not found. */ int find(char ch) { int i; for(i=0; i < len; i++) if(members[i] == ch) return i; return -1; } // Add a unique element to a set. public static Set operator +(Set ob, char ch) { Set newset = new Set(ob.len + 1); // make a new set one element larger // copy elements for(int i=0; i < ob.len; i++) newset.members[i] = ob.members[i]; // set len newset.len = ob.len; // see if element already exists if(ob.find(ch) == -1) { // if not found, then add // add new element to new set newset.members[newset.len] = ch; newset.len++; } return newset; // return updated set } // Remove an element from the set. public static Set operator -(Set ob, char ch) { Set newset = new Set(); int i = ob.find(ch); // i will be -1 if element not found // copy and compress the remaining elements for(int j=0; j < ob.len; j++) if(j != i) newset = newset + ob.members[j]; return newset; } // Set union. public static Set operator +(Set ob1, Set ob2) { Set newset = new Set(ob1); // copy the first set // add unique elements from second set for(int i=0; i < ob2.len; i++) newset = newset + ob2[i]; return newset; // return updated set } // Set difference. public static Set operator -(Set ob1, Set ob2) { Set newset = new Set(ob1); // copy the first set // subtract elements from second set for(int i=0; i < ob2.len; i++) newset = newset - ob2[i]; return newset; // return updated set } } } // Demonstrate the Set class. public class SetDemo10 { public static void Main() { // construct 10-element empty Set Set s1 = new Set(); Set s2 = new Set(); Set s3 = new Set(); s1 = s1 + 'A'; s1 = s1 + 'B'; s1 = s1 + 'C'; Console.Write("s1 after adding A B C: "); for(int i=0; i<s1.Length; i++) Console.Write(s1[i] + " "); Console.WriteLine(); s1 = s1 - 'B'; Console.Write("s1 after s1 = s1 - 'B': "); for(int i=0; i<s1.Length; i++) Console.Write(s1[i] + " "); Console.WriteLine(); s1 = s1 - 'A'; Console.Write("s1 after s1 = s1 - 'A': "); for(int i=0; i<s1.Length; i++) Console.Write(s1[i] + " "); Console.WriteLine(); s1 = s1 - 'C'; Console.Write("s1 after a1 = s1 - 'C': "); for(int i=0; i<s1.Length; i++) Console.Write(s1[i] + " "); Console.WriteLine("\n"); s1 = s1 + 'A'; s1 = s1 + 'B'; s1 = s1 + 'C'; Console.Write("s1 after adding A B C: "); for(int i=0; i<s1.Length; i++) Console.Write(s1[i] + " "); Console.WriteLine(); s2 = s2 + 'A'; s2 = s2 + 'X'; s2 = s2 + 'W'; Console.Write("s2 after adding A X W: "); for(int i=0; i<s2.Length; i++) Console.Write(s2[i] + " "); Console.WriteLine(); s3 = s1 + s2; Console.Write("s3 after s3 = s1 + s2: "); for(int i=0; i<s3.Length; i++) Console.Write(s3[i] + " "); Console.WriteLine(); s3 = s3 - s1; Console.Write("s3 after s3 - s1: "); for(int i=0; i<s3.Length; i++) Console.Write(s3[i] + " "); Console.WriteLine("\n"); s2 = s2 - s2; // clear s2 s2 = s2 + 'C'; // add ABC in reverse order s2 = s2 + 'B'; s2 = s2 + 'A'; Console.Write("s1 is now: "); for(int i=0; i<s1.Length; i++) Console.Write(s1[i] + " "); Console.WriteLine(); Console.Write("s2 is now: "); for(int i=0; i<s2.Length; i++) Console.Write(s2[i] + " "); Console.WriteLine(); Console.Write("s3 is now: "); for(int i=0; i<s3.Length; i++) Console.Write(s3[i] + " "); Console.WriteLine(); } }
1. | Generic Set | ||
2. | Hash Set | ||
3. | Hash Set 2 |