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

Code must be in C++!!! CODE MUST BE IN C++!!!!!!!! Answer with DList.C and DList

ID: 3797335 • Letter: C

Question

Code must be in C++!!!
CODE MUST BE IN C++!!!!!!!!

Answer with DList.C and DList.h

//Here is the main.C file

In this project, you are asked to design and implement a class for double link list to hold integers: The class should be called DList, you also need a class called Node that contains an int as the data Node needs the following data: int data //the data held by the node Node parent; //the parent of the Node Node* child; the child of the Node Node needs the following public functions Node (int) constructor to create a Node with the input int int GetData return the int held by the Node DList needs a head and tail, both should be pointers to Node, and initialized to NULL DList needs a default constructor (no parameter), a copy constructor (take const DList & as input) DList needs the following public functions: void Push Front (int a) //create a Node containing a //and add i to the front of the list void Push End (int a) //create a Node containing a and add it to the end of the list Node PopFront //popping out the first Node of the list, //if the list i s empty, return NULL Node* PopEnd //popping out the last Node of the list, //if the list is empty return NULL void Print ListForward //print every element from start to end //in one line separated by a space void Print ListReverse //print every element from end to start //in one line separated by a space 2 Files to turn in: You need to turn in four files in a targz file: makefile, main.C, DList.C, DList.h. Among them, you need to use the main. C provided from the class web site which you cannot modify at all. DList h declares the class DList and Node. You can make DList the friend of Node so it can access the private data of the Node.

Explanation / Answer

#include <iostream>
using namespace std;

class Node
{
public :
int value;
Node *N,*P;
Node(int y)
{
      value = y;
      N = P = NULL;
}
int GetData(){
      return value;
}
};

class DList
{
Node *front;
Node *back;
public:
DList()
{
   front = NULL;
   back = NULL;
}
~DList(){ destroyList();}
void PushFront(int x);
void PushEnd(int x);
Node* PopFront();
Node* PopEnd();
void PrintListForward();
void PrintListReverse();

void destroyList();
};

void DList::PushFront(int x)
{
        Node *n = new Node(x);
        if( front == NULL)
        {
            front = n;
            back = n;
        }
        else
        {
            front->P = n;
            n->N = front;
            front = n;
        }
}
Node* DList::PopFront()
{
        Node *n = NULL;
        if( front == NULL)
        {
            return NULL;
        }
       else if(front==back){
           n = front;
           back = NULL;
           front = NULL;
      
       }
        else
        {
           n = front;
           front = n->N;
           front->P=NULL;
          
        }
        return n;
}
void DList::PushEnd(int x)
{
        Node *n = new Node(x);
        if( back == NULL)
        {
            front = n;
            back = n;
        }
        else
        {
            back->N = n;
            n->P = back;
            back = n;
        }

}
Node* DList::PopEnd()
{
        Node *n = NULL;
        if( back == NULL)
        {
            return NULL;
        }
        else if(back==front){
           n = back;
           back = NULL;
           front = NULL;
          
       }
       else
        {
            n = back;
           back = n->P;
           back->N = NULL;
          
        }
        return n;
}
void DList::PrintListForward()
{
      Node *temp = front;
      cout << " Nodes in forward order:" << endl;
      while(temp != NULL)
      {
         cout << temp->value << "   " ;
         temp = temp->N;
      }
}
void DList::PrintListReverse()
{
      Node *temp = back;
      cout << " Nodes in reverse order :" << endl;
      while(temp != NULL)
      {
         cout << temp->value << "   " ;
         temp = temp->P;
      }
}
void DList::destroyList()
{
    Node *T = back;
    while(T != NULL)
    {
        Node *T2 = T;
        T = T->P;
        delete T2;
    }
    front = NULL;
    back = NULL;
}
int main()
{
     DList list;
    int i;

    //pust 10 numbers to the end
    for (i = 0; i < 10; i++) list.PushEnd(i);

    cout << "Print forward ";
    list.PrintListForward();
    cout << "Print reverse ";
    list.PrintListReverse();

    cout << "Pop front and print ";
    //print the list from the beginning
    Node* n = list.PopFront();
    while ( n != NULL) {
        cout << n->GetData() << endl;
        delete n;
        n = list.PopFront();
    }


    //pust 10 numbers to the front
    for (i = 0; i < 10; i++) list.PushFront(i);

    //test copy constructor
    DList* list2 = new DList(list);
  
    cout << "Pop end and print ";
    //print the list from the end
    n = list2->PopEnd();
    while ( n != NULL) {
        cout << n->GetData() << endl;
        delete n;
        n = list2->PopEnd();
    }

    delete list2;
    return 0;
}