00001 00005 00006 #include "elements.h" 00007 00008 Set::Set() 00009 { 00010 head = (listNode *) 0; 00011 } 00012 00013 Set::~Set() 00014 { 00015 listNode *p = head; 00016 while (p){ 00017 listNode *cur = p; 00018 p = p->next; 00019 delete cur; 00020 } 00021 } 00022 00023 void Set::insert(InfoRecord *info) 00024 { 00025 if (!find(info)) 00026 { 00027 listNode *node = new listNode(); 00028 node->info = info; 00029 node->next = head; 00030 head = node; 00031 } 00032 00033 } 00034 00035 00036 void Set::myRemove(listNode **n, InfoRecord *r) 00037 { 00038 if ((*n)->info == r) 00039 *n = (*n)->next; 00040 else 00041 myRemove(&((*n)->next), r); 00042 } 00043 00044 void Set::remove(InfoRecord * r) 00045 { 00046 listNode *p = head; 00047 if (!head) 00048 return; 00049 00050 listNode *q = head->next; 00051 00052 if (p->info == r){ 00053 head = head->next; 00054 return; 00055 } 00056 00057 while (q){ 00058 if (q->info == r){ 00059 p->next = q->next; 00060 delete q; 00061 return; 00062 } 00063 else { 00064 p = q; 00065 q = q->next; 00066 } 00067 } 00068 } 00069 00070 int Set::find(InfoRecord * r) 00071 { 00072 listNode *p = head; 00073 while (p) { 00074 if (p->info == r) return 1; 00075 else p = p->next; 00076 } 00077 return 0; 00078 } 00079 00080 InfoRecord * Set::iterator(Iterator *iter) 00081 { 00082 if (head){ 00083 iter->next = head->next; 00084 return head->info; 00085 } 00086 return 0; 00087 } 00088 00089 InfoRecord * Set::next(Iterator *iter) 00090 { 00091 // ckout << "set::next: " << iter->next << "\n"; 00092 if (!iter->next) 00093 { return 0; 00094 } 00095 // ckout << "set::next: iter->next->info=" << iter->next->info << "\n"; 00096 InfoRecord *temp = iter->next->info; 00097 iter->next = iter->next->next; 00098 return temp; 00099 } 00100 00101 00102 int Set::numElements() 00103 { 00104 int n; 00105 n = 0; 00106 listNode *p = head; 00107 while (p){ 00108 n++; 00109 p = p->next; 00110 } 00111 return n; 00112 } 00113 00114 void Set::print() 00115 { 00116 listNode *p = head; 00117 while (p){ 00118 printf("%d ",p->info->Id); 00119 p = p->next; 00120 } 00121 } 00122 00123