I'm workng on a project that I thought I understood and it turns out that I have no idea what I'm doing. The program is supposed to list different set of numbers out of an existing set, implemeting union and intersection. The program builds with no errirs and partially runs but then crashes. If someone can point out what I've done wrong and how to fit it I would be much obliged. Here is my code so far.
// list.cpp // simple linked list program #include <stdlib.h> #include <string> #include <iostream> using std::cout; using std::string; // node object for the linked list struct Node { int data; Node* link; }; // implement a singly linked list class LinkedList {protected: Node* front; // pointer to the front of the linked list Node* back; // pointer to the last node in the linked list public: // constructs an empty list LinkedList() { front = back = NULL; } // search the list for a target value // return index if found or -1 if not found int Search(int targetVal) { Node* p; int count = 0; for (p = front; p != NULL; p = p->link) { if (p->data == targetVal) { return count; } count++; } return -1; } // deletes the list ~LinkedList() { // remove objects from the list as long as list is not empty while(Length() > 0) { RemoveFront(); } } // inserts a node at the front of the list void InsertFront(int newValue) { Node* newNode = new Node; newNode->data = newValue; if (front == NULL) { // list must be empty so make front & back point to new node front = back = newNode; newNode->link = NULL; } else { // list is not empty so insert between front and first node newNode->link = front; front = newNode; } } // removes a node from the front of the list int RemoveFront() { int returnVal; Node *temp; if (front != NULL) { // list is not empty so remove & return first node returnVal = front->data; temp = front; front = front->link; } else { // list is empty just return 0 returnVal = 0; } return returnVal; } // returns the length of the list int Length() { Node* p; int count = 0; // loop through each node in the list until we find a null value for (p = front; p != NULL; p = p->link) { count++; } return count; } // outputs a string containing all the data values in the list void Output() { Node* p; // loop through each node in the list until we find a null value for (p = front; p != NULL; p = p->link) { cout << p->data << ", "; } } }; // use inheritance to create a Set class from the LinkedList class class Set : public LinkedList { public: // insert a new value only if it is unique (not already in the set) void Insert(int newValue) { int duplicate = Search(newValue); if (duplicate == -1) InsertFront(newValue); } // make this the union of two sets void Union(Set& a, Set& B)/> { Node*p; for(p = a.front; p != NULL; p = p->link) { Insert(p->data); } for(p = b.front; p != NULL; p = p->link) { Set::Insert(p->data); } } // make this the intersection of two sets void Intersection(Set& a, Set& B)/> { Node*p; Node*q; for(p = a.front; p != NULL; p = p->link) { for(q = b.front; p != NULL; p = p->link) { if (p == q) { Insert(p->data); } } } } }; int main() { Set setA, setB, setUnion, setIntersection; setA.Insert(5); setA.Insert(2); setA.Insert(3); setA.Insert(5); setA.Insert(2); cout << "Contents of setA: "; setA.Output(); cout << "\n\n"; setB.Insert(1); setB.Insert(2); setB.Insert(4); cout << "Contents of setB: "; setB.Output(); cout << "\n\n"; setUnion.Union(setA, setB); cout << "Contents of setA union setB: "; setUnion.Output(); cout << "\n\n"; setIntersection.Intersection(setA, setB); cout << "Contents of setA intersection setB: "; setIntersection.Output(); cout << "\n\n"; }