using namespace std;
int main()
{
cout < "enter="" a="" test="" number(1-5):="">
int test;
cin >> test;
cout <>
//tests constructor, destructor, push_front, pop_front, display
if (test == 1) {
cout < "\nlist1="" constructor="">
IntList list1;
cout < "\npushfront="">
list1.push_front( 10 );
cout < "\npushfront="">
list1.push_front( 20 );
cout < "\npushfront="">
list1.push_front( 30 );
cout < "\nlist1:="">
list1.display();
cout <>
list1.pop_front();
cout < "\nlist1:="">
list1.display();
cout <>
list1.pop_front();
cout < "\nlist1:="">
list1.display();
cout <>
list1.pop_front();
cout < "\nlist1:="">
list1.display();
cout <>
}
if (test == 1) {
cout < "list1="" destructor="" called"=""><>
}
//tests push_back
if (test == 2) {
cout < "\nlist2="" constructor="">
IntList list2;
cout < "\npushback="">
list2.push_back( 10 );
cout < "\npushback="">
list2.push_back( 20 );
cout < "\npushback="">
list2.push_back( 30 );
cout < "\nlist2:="">
list2.display();
cout <>
list2.pop_front();
cout < "\nlist2:="">
list2.display();
cout <>
list2.pop_front();
cout < "\nlist2:="">
list2.display();
cout <>
list2.pop_front();
cout < "\nlist2:="">
list2.display();
cout <>
}
if (test == 2) {
cout < "list2="" destructor="" called"=""><>
}
//tests insert_sorted
if (test == 4) {
cout < "\nlist4="" constructor="">
IntList list4;
cout < "\ninsert="">
list4.insert_ordered( 20 );
cout < "\ninsert="">
list4.insert_ordered( 10 );
cout < "\ninsert="">
list4.insert_ordered( 30 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 50 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 40 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 11 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 10 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 11 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 9 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 50 );
cout < "\nlist4:="">
list4.display();
cout < "\ninsert="">
list4.insert_ordered( 51 );
cout < "\nlist4:="">
list4.display();
cout <>
}
if (test == 4) {
cout < "list4="" destructor="" called"=""><>
}
//tests remove_duplicates
if (test == 5) {
cout < "\nlist5="" constructor="">
IntList list5;
cout < "\npushfront="">
list5.push_front( 10 );
cout < "\npushfront="">
list5.push_front( 20 );
cout < "\npushfront="">
list5.push_front( 10 );
cout < "\npushfront="">
list5.push_front( 30 );
cout < "\nlist5:="">
list5.display();
cout <>
list5.remove_duplicates();
cout < "\nlist5:="">
list5.display();
cout < "\npushfront="">
list5.push_front( 10 );
cout < "\nlist5:="">
list5.display();
cout <>
list5.remove_duplicates();
cout < "\nlist5:="">
list5.display();
cout < "\npushfront="">
list5.push_front( 20 );
cout < "\nlist5:="">
list5.display();
cout <>
list5.remove_duplicates();
cout < "\nlist5:="">
list5.display();
cout < "\npushfront="">
list5.push_front( 20 );
cout < "\nlist5:="">
list5.display();
cout <>
list5.remove_duplicates();
cout < "\nlist5:="">
list5.display();
cout < "\npushfront="">
list5.push_front( 20 );
cout < "\npushfront="">
list5.push_front( 20 );
cout < "\nlist5:="">
list5.display();
cout <>
list5.remove_duplicates();
cout < "\nlist5:="">
list5.display();
cout <>
list5.remove_duplicates();
cout < "\nlist5:="">
list5.display();
cout <>
list5.pop_front();
cout <>
list5.pop_front();
cout <>
list5.push_front(30);
cout < "\nlist5:="">
list5.display();
cout < "\nremove_duplicates()"=""><>
list5.remove_duplicates();
cout < "\nlist5:="" "=""><>
list5.display();
cout <>
list5.push_front(30);
cout <>
list5.push_front(30);
cout < "\nlist5:="">
list5.display();
cout < "\nremove_duplicates()"=""><>
list5.remove_duplicates();
cout < "\nlist5:="" "=""><>
list5.display();
cout < "\nremove_duplicates()"=""><>
list5.remove_duplicates();
cout < "\nlist5:="" "=""><>
list5.display();
cout <>
list5.pop_front();
cout < "\nlist5:="">
list5.display();
cout < "\nremove_duplicates()"=""><>
list5.remove_duplicates();
cout < "\nlist5:="" "=""><>
list5.display();
cout <>
}
if (test == 5) {
cout < "list5="" destructor="" called"=""><>
}
/*
* Destructor will be tested by looking at code. There is no run-time
* test for it. Make sure your destructor actually deletes ALL nodes, not
* just the head and/or tail.
*/
return 0;
}
Extracted text: IntList Specifications You are required to come up with a separate implementation file (IntList.cpp) that implements the member functions of the IntList class. While developing your IntList class you may write your own test harness (within a file named main.cpp) but I provide the main.cpp that is used for testing output on zyBooks. Never implement more than 1 or 2 member functions without fulling testing them with your own test harness IntNode struct and IntList header To simplify this project, I am providing the header file. Please see the discussion board post to obtain the file. It contains the IntNode code that you must use. You are not allowed to alter this header file in any way whatsoever. IntList class You should define function stubs for all class functions to allow the program to fully compile. Recall function stubs do not have logic implemented they are simple empty functions or functions with only a return statement that are implemented to allow compilation and execution. Encapsulated (Private) Data Fields • head: IntNode * • tail: IntNode * Public Interface (Public Member Functions) • IntList(): Initializes an empty list. • »IntList(): Deallocates all remaining dynamically allocated memory (all remaining IntNodes). • void display) const: Displays to a single line all of the int values stored in the list, each separated by a space. This function does NOT output a newline or space at the end. • void push_front(int value): Inserts a data value (within a new node) at the front end of the list. • void pop_front(): Removes the value (actually removes the node that contains the value) at the front end of the list. Does nothing if the list is already empty. • bool empty() const: Returns true if the list does not store any data values (does not have any nodes), otherwise returns false. • void push_back(int value): Inserts a data value (within a new node) at the back end of the list. • void clear(): Removes (deallocates) all IntNodes in the IntList. Don't forget to set both head and tail to appropriate values for an empty list. • IntList(const IntList &cpy): the copy constructor. Make sure this performs deep copy. • IntList & operator=(const IntList &rhs): the overloaded assignment operator. Make sure this performs deep copy. • void insert_ordered(int value): Inserts a data value (within a new node) in an ordered list. Assumes the list is already sorted in
data; t = t->next; return out; "/>
Extracted text: • void display) const: Displays to a single line all of the int values stored in the list, each separated by a space. This function does NOT output a newline or space at the end. • void push_front(int value): Inserts a data value (within a new node) at the front end of the list. • void pop_front(): Removes the value (actually removes the node that contains the value) at the front end of the list. Does nothing if the list is already empty. • bool empty() const: Returns true if the list does not store any data values (does not have any nodes), otherwise returns false. • void push_back(int value): Inserts a data value (within a new node) at the back end of the list. • void clear(): Removes (deallocates) all IntNodes in the IntList. Don't forget to set both head and tail to appropriate values for an empty list. • IntList(const IntList &cpy): the copy constructor. Make sure this performs deep copy. • IntList & operator=(const IntList &rhs): the overloaded assignment operator. Make sure this performs deep copy. • void insert_ordered(int value): Inserts a data value (within a new node) in an ordered list. Assumes the list is already sorted in ascending order (i.e., Do not sort the list first, assume the list is already is sorted.) This function loops through the list until if finds the correct position for the new data value and then inserts the new IntNode in that location. This function may NOT ever sort the list. • void remove_duplicates(): Removes all duplicate data values (actually removes the nodes that contain the values) within the list. Always remove just the later value within the list when a duplicate is found. This function may NOT ever sort the list. Given Function That Overloads the < operator.="" this="" provided="" function="" overload="" should="" go="" at="" the="" bottom="" of="" your="" class="" c++="" file.="" •="" friend="" ostream="" &=""><(ostream &out,="" const="" intlist="" &rhs):="" a="" global="" friend="" function="" that="" outputs="" to="" the="" stream="" all="" of="" the="" integer="" values="" within="" the="" list="" on="" a="" single="" line,="" each="" separated="" by="" a="" space.="" this="" function="" does="" not="" send="" to="" the="" stream="" a="" newline="" or="" space="" at="" the="" end.="" ostream="" &="">(ostream>< (ostream="" &out,="" const="" intlist="" &rhs)="" {="" intnode*="" t="rhs.head;" if="" (t="" !="NULL)" {="" out="">< t-="">data; t = t->next; } while (t != NULL) { out < "="">< t-="">data; t = t->next; return out;