solved: Use C++ for the following: – implement the ListArray ADT [the…
QuestionAnswered step-by-stepUse C++ for the following: – implement the ListArray ADT [the…Use C++ for the following:- implement the ListArray ADT [the declaration is given in ListArray.h]- implement the following operations:- constructor, assignment operator, destructor- insert, remove, replace, clear- isFull, isEmpty- gotoBeginning, gotoEnd, gotoNext, gotoPrior, getCursor- implement the member function moveToNth(…) that removes the item marked by the cursor and inserts it as the nth element ofthe list; test you implementation by turning the flag LAB3_TEST2 from 0 to 1 in config.h;- implement the ListArray member function find(…) that searches for the element given as a parameter; the search starts at the cursor and stops when it finds the element or at the end of the list; the cursor remains on the last position searched; test you implementation by turning the flag LAB3_TEST3 from 0 to 1 in config.h;*********ListArray.h************//——————————————————————–//// Laboratory 3 ListArray.h// **Instructor’s Solution**// Class declaration for the array implementation of the List ADT////——————————————————————–#ifndef LISTARRAY_H#define LISTARRAY_H#include #include using namespace std;#pragma warning( disable : 4290 )template < typename DataType >class List{public:static const int MAX_LIST_SIZE = 10; // Default maximum list size// ConstructorsList ( int maxNumber = MAX_LIST_SIZE ); // Default constructorList ( const List& source ); // Copy constructor // Overloaded assignment operatorList& operator= ( const List& source );// Destructorvirtual ~List ();// List manipulation operationsvirtual void insert ( const DataType& newDataItem ) // Insert after cursorthrow ( logic_error ); void remove () throw ( logic_error ); // Remove data itemvirtual void replace ( const DataType& newDataItem ) // Replace data itemthrow ( logic_error );void clear (); // Clear list// List status operationsbool isEmpty () const; // List is emptybool isFull () const; // List is full// List iteration operationsvoid gotoBeginning () // Go to beginningthrow ( logic_error );void gotoEnd () // Go to endthrow ( logic_error );bool gotoNext () // Go to next data itemthrow ( logic_error );bool gotoPrior () // Go to prior data itemthrow ( logic_error );DataType getCursor () constthrow ( logic_error ); // Return data item// Output the list structure — used in testing/debuggingvirtual void showStructure () const;// In-lab operationsvoid moveToNth ( int n ) // Move data item to pos. nthrow ( logic_error ); bool find ( const DataType& searchDataItem ) // Find data itemthrow ( logic_error ); protected:// Data membersint maxSize,size, // Actual number of data item in the listcursor; // Cursor array indexDataType *dataItems; // Array containing the list data item};#endif************config.h***********************/*** List class (Lab 3/Lab 4) configuration file.* Activate test #N by defining the corresponding LAB3_TESTN to have the value 1.** Because you will copy the List class code to your ordered list directory, having* two “config.h” files presented the risk of accidentally replacing the one in the* ordered list directory. So the two configuration files are combined for labs 3 and 4.** NOTE!!! There was an error in the printed book. TEST1 shows up twice in the book.* The basic List implementation uses TEST1 as described below, then exercise 2* is activated by TEST2*/#define LAB3_TEST1 0 // 0 => test with char, 1 => test with int#define LAB3_TEST2 0 // Prog exercise 2: moveToNth#define LAB3_TEST3 0 // Prog exercise 3: find/*** Ordered list class tests.*/#define LAB4_TEST1 0 // merge: programming exercise 2#define LAB4_TEST2 0 // subset: programming exercise 3 **********ListArray.cpp********#include “ListArray.h”template < typename DataType >List::List ( int maxNumber ){}template < typename DataType >List::List ( const List& source ){} template < typename DataType >List& List::operator= ( const List& source ){return *this;}template < typename DataType >List::~List (){}template < typename DataType >void List::insert ( const DataType& newDataItem )throw ( logic_error ){}template < typename DataType >void List::remove () throw ( logic_error ){}template < typename DataType >void List::replace ( const DataType& newDataItem )throw ( logic_error ){}template < typename DataType >void List::clear (){}template < typename DataType >bool List::isEmpty () const{return false;}template < typename DataType >bool List::isFull () const{return false;}template < typename DataType >void List::gotoBeginning ()throw ( logic_error ){}template < typename DataType >void List::gotoEnd ()throw ( logic_error ){}template < typename DataType >bool List::gotoNext ()throw ( logic_error ){return false;}template < typename DataType >bool List::gotoPrior ()throw ( logic_error ){return false;}template < typename DataType >DataType List::getCursor () constthrow ( logic_error ){DataType t;return t;}#include “show3.cpp”template < typename DataType >void List::moveToNth ( int n )throw ( logic_error ){}template < typename DataType >bool List::find ( const DataType& searchDataItem )throw ( logic_error ){return false;} **************show3.cpp*************//——————————————————————–//// Laboratory 3 show3.cpp//// Array implementation of the showStructure operation for the// List ADT////——————————————————————–#include “ListArray.h”template void List:: showStructure () const// outputs the data items in a list. if the list is empty, outputs// “empty list”. this operation is intended for testing/debugging// purposes only.{int j; // loop counterif ( size == 0 )cout << "empty list" << endl;// The Ordered List code blows up below. Since this is just debugging// code, we check for whether the OrderedList is defined, and if so,// print out the key value. If not, we try printing out the entire item.// Note: This assumes that you have used the double-inclusion protection// in your OrderedList.cpp file by doing a "#ifndef ORDEREDLIST_CPP", etc.// If not, you will need to comment out the code in the section under// the "else", otherwise the compiler will go crazy in lab 4.// The alternative is to overload operator<< for all data types used in// the ordered list.else{cout << "size = " << size<< " cursor = " << cursor << endl;for ( j = 0 ; j < maxSize ; j++ )cout << j << "t";cout << endl;for ( j = 0 ; j < size ; j++ ) {if( j == cursor ) {cout << "[";cout << dataItems[j]#ifdef ORDEREDLIST_CPP.getKey()#endif;cout << "]";cout << "t";}elsecout << dataItems[j]#ifdef ORDEREDLIST_CPP.getKey()#endif<< "t";}cout << endl;}} ***************test3.cpp************//--------------------------------------------------------------------//// Laboratory 3 test3.cpp//// Test program for the operations in the List ADT////--------------------------------------------------------------------#include using namespace std;// Because of C++ template implementations, must include source for templated class// That is ugly, but it is required.#include “ListArray.cpp”#include “config.h”void print_help();void showTwoLists(List list1, List list2); // Displays two lists that are supposedly equivalent.int main(){// hack: put a “try/catch” with list creation code?// we need to demonstrate use of the try/catch syntax.#if LAB3_TEST1List testList(8); // Test list to test with intsList copyList(testList); // Used to test copy constructorList assignList; // Used to test assignment operatorint testData; // List data item#elseList testList(8); // Test list to test with charsList copyList(testList); // Used to test copy constructorList assignList; // Used to test assignment operatorchar testData; // List data item#endifint n; // Position within listchar cmd; // Input commandprint_help();do{testList.showStructure(); // Output listcout << endl << "Command: "; // Read commandcin >> cmd;if ( cmd == ‘+’ || cmd == ‘=’ || cmd == ‘?’ )cin >> testData;else if ( cmd == ‘M’ || cmd == ‘m’ )cin >> n;switch ( cmd ){case ‘H’ : case ‘h’:print_help();break;case ‘+’ : // insertcout << "Insert " << testData << endl;try{testList.insert(testData);}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the insert function.";}break;case '-' : // removecout << "Remove the data item marked by the cursor"<< endl;try{testList.remove();}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the remove function.";}break;case '=' : // replacecout << "Replace the data item marked by the cursor "<< "with " << testData << endl;try{testList.replace(testData);}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the replace function.";}break;case '@' : // getCursortry{cout << "Data item marked by the cursor is "<< testList.getCursor() << endl;}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the getCursor function.";}break;case '<' : // gotoBeginningcout << "Go to the beginning of the list" << endl;try{testList.gotoBeginning();}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the gotoBeginning function.";}break;case '>‘ : // gotoEndcout << "Go to the end of the list" << endl;try{testList.gotoEnd();}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the gotoEnd function.";}break;case 'N' : case 'n' : // gotoNexttry{if ( testList.gotoNext() )cout << "Go to the next data item" << endl;elsecout << "Failed -- either at the end of the list "<< "or the list is empty" << endl;}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the gotoNext function.";}break;case 'P' : case 'p' : // gotoPriortry{if ( testList.gotoPrior() )cout << "Go to the prior data item" << endl;elsecout << "Failed -- either at the beginning of the "<< "list or the list is empty" << endl;}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the gotoPrior function.";}break;case 'C' : case 'c' : // clearcout << "Clear the list" << endl;testList.clear();break;case 'E' : case 'e' : // isEmptyif ( testList.isEmpty() )cout << "List is empty" << endl;elsecout << "List is NOT empty" << endl;break;case 'F' : case 'f' : // isFullif ( testList.isFull() )cout << "List is full" << endl;elsecout << "List is NOT full" << endl;break;case '!' :showTwoLists(copyList, testList);break;case '#' :assignList.insert('x');assignList = testList;showTwoLists(assignList, testList);break;#if LAB3_TEST2case 'M' : case 'm' : // In-lab Exercise 2cout << "Move the data item marked by the cursor to "<< "posititon " << n << endl;try{testList.moveToNth(n);}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the moveToNth function.";}break;#endif // LAB3_TEST1#if LAB3_TEST3case '?' : // In-lab Exercise 3try{if ( testList.find(testData) )cout << "Found" << endl;elsecout << "NOT found" << endl;}catch (logic_error &e){cerr << "EXCEPTION: A logic error occurred in the find function.";}break;#endif // LAB3_TEST3case 'Q' : case 'q' : // Quit test programbreak;default : // Invalid commandcout << "Inactive or invalid command" << endl;}}while ( cin && cmd != 'Q' && cmd != 'q' );if( !cin ) {cout << "Input error" << endl;}return 0;}void showTwoLists(List list1, List list2) {// Variables should match, but dynamic memory buffer must be differentcout << "Look at the two lists below and decide whether they are equivalent" << endl;cout << "List 1: ";list1.showStructure();cout << "List 2: ";list2.showStructure();cout << endl;}void print_help(){cout << endl << "Commands:" << endl;cout << " H : Help (displays this message)" << endl;cout << " +x : Insert x after the cursor" << endl;cout << " - : Remove the data item marked by the cursor" << endl;cout << " =x : Replace the data item marked by the cursor with x"<< endl;cout << " @ : Display the data item marked by the cursor" << endl;cout << " < : Go to the beginning of the list" << endl;cout << " > : Go to the end of the list” << endl;cout << " N : Go to the next data item" << endl;cout << " P : Go to the prior data item" << endl;cout << " C : Clear the list" << endl;cout << " E : Empty list?" << endl;cout << " F : Full list?" << endl;cout << " ! : Test copy constructor" << endl;cout << " # : Test assignment operator" << endl;cout << " M n : Move data item marked by cursor to pos. n ("#if LAB3_TEST2<< "Active "#else<< "Inactive "#endif // LAB3_TEST2<< ": In-lab Ex. 2)" << endl;cout << " ?x : Search rest of list for x ("#if LAB3_TEST3<< "Active "#else<< "Inactive "#endif // LAB3_TEST3<< ": In-lab Ex. 3)" << endl;cout << " Q : Quit the test program" << endl;cout << endl;} Computer ScienceEngineering & TechnologyObject-Oriented ProgrammingShare Question
Don't use plagiarized sources. Get Your Custom Essay on
solved: Use C++ for the following: – implement the ListArray ADT [the…
Just from $10/Page