Thanks for the tip Sensui!
I've been banging my head against the wall but I'm very close now. I think that I have all of my code right so it may be a syntax error. If you can see what I've done wrong please tell me.
cpp
// 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&
{
Node*p;
for( p = a.front;p != NULL; p = p->link){
Set::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&
{
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);
}
}
}
}
};
void 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";
system("PAUSE");
}
I think my error lies somewhere between lines 101 and 137.
This post has been edited by Outtey22: 7 Sep, 2008 - 10:55 AM