Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C++ CODING. STEP 3 CODE: #include using namespace std; class LIST_NODE { public:

ID: 3606274 • Letter: C

Question

C++ CODING.

STEP 3 CODE:

#include

using namespace std;

class LIST_NODE

{

public:

int data; // data element of node

LIST_NODE *next; // pointer element of node

};

class LINKED_LIST_CLASS

{

public:

LINKED_LIST_CLASS(); // default constructor

LINKED_LIST_CLASS(LINKED_LIST_CLASS &); // copy constructor

~LINKED_LIST_CLASS(); // destructor

void Add(int); // mutator

void Print(); // accessor

LIST_NODE * Search(int); // accessor

void Remove(int); // mutator

bool Is_Empty(); // accessor

private:

LIST_NODE *front; // pointer to front of list

};

LINKED_LIST_CLASS::LINKED_LIST_CLASS()

{

cout << endl << "The default constructor has been called. ";

front = new LIST_NODE;

front->next = 0; // initialize the next field to null

front->data = -10000;

}

LINKED_LIST_CLASS::LINKED_LIST_CLASS(LINKED_LIST_CLASS & org)

{

cout << endl << "The copy constructor has been called. ";

front = new LIST_NODE;

front->next = 0;

front->data = -10000;

LIST_NODE *p = org.front->next;

LIST_NODE *back = 0;

while(p!=0)

{

if (back == 0)

{

front->next = new LIST_NODE;

back = front->next;

back->next = 0;

back->data = p->data;

}

else

{

back->next = new LIST_NODE;

back = back->next;

back->data = p->data;

back->next = 0;

}

p=p->next;

}

}

LINKED_LIST_CLASS::~LINKED_LIST_CLASS()

{

cout << endl << "The destructor has been called. ";

while (front->next != 0)

{

LIST_NODE *p = front->next;

front->next = front->next->next;

delete p;

}

delete front;

front = 0;

}

void LINKED_LIST_CLASS::Add(int item)

{

LIST_NODE *p = new LIST_NODE;

p->data = item;

if (front->next== 0) // empty list

{

front->next = p;

p->next = 0;

}

else // list has information and is not empty

{

p->next = front->next;

front->next = p;

}

}

void LINKED_LIST_CLASS::Print()

{

cout << endl;

for(LIST_NODE *p = front->next; p != 0; p = p->next)

{

cout << p->data;

if (p->next != 0)

{

cout << "-->";

}

}

cout<

}

LIST_NODE * LINKED_LIST_CLASS::Search(int key)

{

for(LIST_NODE *p = front->next; p!=0; p=p->next)

{

if (p->data == key)

return p;

}

return 0; // key not found in list

}

void LINKED_LIST_CLASS::Remove(int key)

{

LIST_NODE *p = Search(key);

if (Is_Empty())

{

cout << key << " is not in the list. No removal performed! ";

}

else

{

LIST_NODE *q = front;

while (q->next->data != key)

{

q = q->next;

}

q->next = p->next; // CRITICAL STEP!!!!

delete p;

}

}

bool LINKED_LIST_CLASS::Is_Empty()

{

return front->next == 0;

}

int main()

{

LINKED_LIST_CLASS L1;

L1.Add(5);

L1.Add(10);

L1.Add(29);

L1.Print();

LINKED_LIST_CLASS L2 = L1;

L2.Print();

L1.Remove(10);

L1.Print();

return 0;

}

ANSWER THE FOLLOWING QUESTIONS:

Question 12: What is the output of the program in Step 3? Referring to the program in Step 3, please explain the order in which nodes are removed from a list. Question 13: Question 14: Is the Search() function called by any member functions of the linked list class for the program in Step 3? Question 15: Please add a statement to the program in Step 3 that tests the Search() function What did you add? Question 16: Please add pre-condition, post-conditions and descriptions for each member function of the LINKED_LIST_CLASS. Answer with your new version of the program

Explanation / Answer

For the first part I'm explaining the answer using close brackets.
1) The default constructor has been called (For L1 Constructor)

29-->10-->5 (Add would append the node at second position of list)
The copy constructor has been called. (For L2 constructor)

29-->10-->5 (This print would give the same result as for L1 constructor)
29-->5 (Would remove 10 from the list)
The destructor has been called. (For delete)

The destructor has been called. (For return)

2) In remove method first it would find the node to be removed using the search method then it checks if list is not empty and if it is not then it will find the previous node of the removed node. Then it will link the next node of previous node to the next node of removed node.

3) Yes, it is being called in Remove function;

4) I would this LIST_NODE *p = Search(5); statement after L1.Add(5) statement