#ifndef H_arrayListType #define H_arrayListType #include #include using namespace std; template class arrayListType { public: const arrayListType& operator=(const arrayListType&); //Overloads the assignment operator bool isEmpty(); //Function to determine whether the list is empty //Postcondition: Returns true if the list is empty; // otherwise, returns false. bool isFull(); //Function to determine whether the list is full //Postcondition: Returns true if the list is full; // otherwise, returns false. int listSize(); //Function to determine the number of elements in the list //Postcondition: Returns the value of length. int maxListSize(); //Function to determine the size of the list //Postcondition: Returns the value of maxSize. void print() const; //Function to output the elements of the list //Postcondition: Elements of the list are output on the // standard output device. bool isItemAtEqual(int location, const elemType& item); //Function to determine whether the item is the same //as the item in the list at the position specified by //Postcondition: Returns true if the list[location] // is the same as the item; otherwise, // returns false. void insertAt(int location, const elemType& insertItem); //Function to insert an item in the list at the //position specified by location. The item to be inserted //is passed as a parameter to the function. //Postcondition: Starting at location, the elements // of the list are shifted down, // list[location] = insertItem;, and // length++; // If the list is full or location is out of // range, an appropriate message is displayed. void insertEnd(const elemType& insertItem); //Function to insert an item at the end of the list //The parameter insertItem specifies the item to be //inserted. //Postcondition: list[length] = insertItem; and length++; // If the list is full, an appropriate // message is displayed. void removeAt(int location); //Function to remove the item from the list at the //position specified by location //Postcondition: The list element at list[location] is // removed and length is decremented by 1. // If location is out of range, an appropriate message // is displayed. void retrieveAt(int location, elemType& retItem); //Function to retrieve the element from the list at the //position specified by location //Postcondition: retItem = list[location] // If location is out of range, an appropriate // message is displayed. void replaceAt(int location, const elemType& repItem); //Function to replace the elements in the list at the //position specified by location. The item to be replaced //is specified by the parameter repItem. //Postcondition: list[location] = repItem // If location is out of range, an appropriate // message is displayed. void clearList(); //Function to remove all the elements from the list //After this operation, the size of the list is zero. //Postcondition: length = 0; int seqSearch(const elemType& item); //Function to search the list for a given item. //Postcondition: If the item is found, returns the location // in the array where the item is found; // otherwise, returns -1. void insert(const elemType& insertItem); //Function to insert the item specified by the parameter //insertItem at the end of the list. However, first the //list is searched to see whether the item to be inserted //is already in the list. //Postcondition: list[length] = insertItem and length++ // If the item is already in the list or the list // is full, an appropriate message is displayed. void remove(const elemType& removeItem); //Function to remove an item from the list. The parameter //removeItem specifies the item to be removed. //Postcondition: If removeItem is found in the list, // it is removed from the list and length is // decremented by one. void removeAll(const elemType& removeItem); //Function to remove all occurences of an item from the list. The parameter //removeItem specifies the item to be removed. //Postcondition: If removeItem is found in the list, // it is removed from the list and length is reduced arrayListType(int size = 100); //constructor //Creates an array of the size specified by the //parameter size. The default array size is 100. //Postcondition: The list points to the array, length = 0, // and maxSize = size arrayListType(const arrayListType& otherList); //copy constructor ~arrayListType(); //destructor //Deallocates the memory occupied by the array. protected: elemType *list; //array to hold the list elements int length; //to store the length of the list int maxSize; //to store the maximum size of the list }; template bool arrayListType::isEmpty() { return (length == 0); } template bool arrayListType::isFull() { return (length == maxSize); } template int arrayListType::listSize() { return length; } template int arrayListType::maxListSize() { return maxSize; } template void arrayListType::print() const { for(int i = 0; i < length; i++) cout< bool arrayListType::isItemAtEqual (int location, const elemType& item) { return(list[location] == item); } template void arrayListType::insertAt (int location, const elemType& insertItem) { if(location < 0 || location >= maxSize) cerr<<"The position of the item to be inserted " <<"is out of range."<= maxSize) //list is full cerr<<"Cannot insert in a full list."< location; i--) list[i] = list[i - 1]; //move the elements down list[location] = insertItem; //insert the item at the //specified position length++; //increment the length } } //end insertAt template void arrayListType::insertEnd(const elemType& insertItem) { if(length >= maxSize) //the list is full cerr<<"Cannot insert in a full list."< void arrayListType::removeAt(int location) { if(location < 0 || location >= length) cerr<<"The location of the item to be removed " <<"is out of range."< void arrayListType::retrieveAt (int location, elemType& retItem) { if(location < 0 || location >= length) cerr<<"The location of the item to be retrieved is " <<"out of range."< void arrayListType::replaceAt (int location, const elemType& repItem) { if(location < 0 || location >= length) cerr<<"The location of the item to be replaced is " <<"out of range."< void arrayListType::clearList() { length = 0; } // end clearList template int arrayListType::seqSearch(const elemType& item) { int loc; bool found = false; for(loc = 0; loc < length; loc++) if(list[loc] == item) { found = true; break; } if(found) return loc; else return -1; } //end seqSearch template void arrayListType::insert(const elemType& insertItem) { int loc; if(length == 0) //list is empty list[length++] = insertItem; //insert the item and //increment the length else if(length == maxSize) cerr<<"Cannot insert in a full list."< void arrayListType::remove(const elemType& removeItem) { int loc; if(length == 0) cerr<<"Cannot delete from an empty list."< void arrayListType::removeAll(const elemType& removeItem) { int n; n = maxSize; int loc; int counter; loc = seqSearch(removeItem); // removeItem was passed down for (counter= 0; n>counter; counter++) { remove(removeItem); } cout << "All instances have been removed"; } //end removeAll template arrayListType::arrayListType(int size) { if(size < 0) { cerr<<"The array size must be positive. Creating " <<"an array of size 100. "< arrayListType::~arrayListType() { delete [] list; } //copy constructor template arrayListType::arrayListType (const arrayListType& otherList) { maxSize = otherList.maxSize; length = otherList.length; list = new elemType[maxSize]; //create the array assert(list != NULL); //terminate if unable to allocate //memory space for(int j = 0; j < length; j++) //copy otherList list [j] = otherList.list[j]; }//end copy constructor template const arrayListType& arrayListType::operator= (const arrayListType& otherList) { if(this != &otherList) //avoid self-assignment { delete [] list; maxSize = otherList.maxSize; length = otherList.length; list = new elemType[maxSize]; assert(list != NULL); for(int i = 0; i < length; i++) list[i] = otherList.list[i]; } return *this; } #endif