guys I've been trying to write this lab for my comp sci class for three days now. i've got to the point where it compiles but when I try to run it a table pops up that's says there's an error somewhere in the program that causes it to abort. the program is a simple one, it uses pointer based lists. Basically I'm supposed to write a code for a parking lot with two lanes. When a car arrives I have to find a spot for it on either of the two lanes. And if a car departs I remove it from whichever lane it is located in. I'm in desperate need of help can someone please give it a look :?:
#include <cstddef> // for NULL
#include <new> // for bad_alloc
#include<iostream>
#include "ListP.h" // header file
using namespace std;
// definitions of methods follow:
// . . .
List::List():head(NULL),size(0) {
}
List::List(const List& aList)
: size(aList.size)
{
if (aList.head == NULL)
head = NULL; // original list is empty
else
{ // copy first node
head = new ListNode;
head->item = aList.head->item;
// copy rest of list
ListNode *newPtr = head; // new list pointer
// newPtr points to last node in new list
// origPtr points to nodes in original list
for (ListNode *origPtr = aList.head->next;origPtr != NULL;origPtr = origPtr->next)
{ newPtr->next = new ListNode;
newPtr = newPtr->next;
newPtr->item = origPtr->item;
} // end for
newPtr->next = NULL; //After the for statements is evaluated as invalid because origPtr->next=NULL; we assigne the last node to point to NULL!
} // end if
} // end copy constructor
List::~List()
{
while (!isEmpty())
remove(1);
} // end destructor
bool List::isEmpty() const
{
return size == 0;
} // end isEmpty
int List::getLength() const
{
return size;
} // end getLength
List::ListNode *List::find(int index) const
{
if ( (index < 1) || (index > getLength()) ) //getLength()=size;
return NULL;
else // count from the beginning of the list.
{ ListNode *cur = head;
for (int skip = 1; skip < index; ++skip)
cur = cur->next;
return cur;
} // end if
} // end find
ListItemType List::retrieve(int index) const
throw(ListIndexOutOfRangeException)
{
ListItemType dataItem;
if ( (index < 1) || (index > getLength()) )
throw (ListIndexOutOfRangeException)("ListIndexOutOfRangeException: retrieve index out of range");
else
{ // get pointer to node, then data in node
ListNode *cur = find(index);
dataItem = cur->item;
}
return dataItem;// end if
} // end retrieve
void List::insert(int index, const ListItemType& newItem)
throw(ListIndexOutOfRangeException, ListException)
{
int newLength = getLength() + 1;
if ( (index < 1) || (index > 10) )
throw (ListIndexOutOfRangeException)("ListIndexOutOfRangeException: insert index out of range");
else
{ // try to create new node and place newItem in it
try
{
ListNode *newPtr = new ListNode;
size = newLength;
newPtr->item = newItem;
// attach new node to list
if (index == 1)
{ // insert new node at beginning of list
newPtr->next = head;
head = newPtr;
}
else
{ ListNode *prev = find(index-1);
// insert new node after node
// to which prev points
newPtr->next = prev->next;
prev->next = newPtr;
} // end if
} // end try
catch (bad_alloc e)
{
throw (ListException)("ListException: memory allocation failed on insert");
} // end catch
} // end if
} // end insert
void List::remove(int index) throw(ListIndexOutOfRangeException)
{
ListNode *cur;
if ( (index < 1) || (index > 10) )
throw (ListIndexOutOfRangeException)(
"ListIndexOutOfRangeException: remove index out of range");
else
{ --size;
if (index == 1)
{ // delete the first node from the list
cur = head; // save pointer to node
head = head->next;
}
else
{ ListNode *prev = find(index - 1);
// delete the node after the node to which prev points
cur = prev->next; // save pointer to node
prev->next = cur->next;
} // end if
// return node to system
cur->next = NULL;
delete cur;
cur = NULL;
} // end if
} // end remove
int main ()
{
List garage1,garage2;
ListItemType licensePlate;
char car;
cout<<"Please enter A/a if you want to park your car in our garage"<<endl;
cout<<"Or enter B/b if you want to find and take your car from our garage"<<endl;
cin>>car;
if (car=='A'||car=='a'&&garage1.getLength()<10)
{
cout<<"Please enter the license plate of the car you wish to park in the first garage"<<endl;
cin>>licensePlate;
garage1.insert(garage1.getLength()+1,licensePlate);
for(int i=0;i<garage1.getLength()+1;i++)
cout<<garage1.retrieve(i)<<" ";
cout<<endl;
}
else if(car=='A'||car=='a'&&garage1.getLength()==10&&garage2.getLength()<10)
{
cout<<"First Garage is full!"<<endl;
cout<<"Please enter the license plate of the car you wish to park in the second garage"<<endl;
cin>>licensePlate;
garage2.insert(garage2.getLength()+1,licensePlate);
for(int i=0;i<garage2.getLength()+1;i++)
cout<<garage2.retrieve(garage2.getLength())<<" ";
cout<<endl;
}
else if(car=='A'||car=='a'&&garage1.getLength()==10&&garage2.getLength()==10)
cout<<"Sorry both our garages are full"<<endl;
else if(car=='B'||car=='b')
{cout<<"Please enter the license plate of your car"<<endl;
cin>>licensePlate;
for(int i=0;i<garage1.getLength()+1;i++)
{
if(garage1.retrieve(i)==licensePlate)
{cout<<"Car found in garage1. Removing it!"<<endl;
garage1.remove(i);
}
else if (garage2.retrieve(i)==licensePlate)
{
cout<<"Car found in garage 2. Removing it!"<<endl;
garage2.remove(i);}
}
}
else
{
cout<<"We're sorry! We couldn't find your car!"<<endl;
for(int i=0;i<garage1.getLength()+1;i++)
cout<<"Garage1: "<<garage1.retrieve(i)<<" ";
cout<<endl;
for(int i=0;i<garage2.getLength()+1;i++)
cout<<"Garage2: "<<garage2.retrieve(i)<<" ";
cout<<endl;
}
return 0;
}