Program MUST be in C Program MUST be in C Source code for ma
Program MUST be in C++!!!!
Program MUST be in C++!!!!!
//Source code for main.c
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 PushFront (int a //create a Node containing a //and add it to the front of the list void PushEnd (int a //create a Node containing a //and add it to the end of the list No de PopFront //popping out the first Node of the list, //if the list is empty, return NULL Node PopEnd //popping out the last Node of the list, //if the list is empty, return NULL void PrintListForward //print every element from start to end //in one line separated by a space void PrintListReverse //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 tar.gz 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.Solution
/*
* Node Declaration
*/
using namespace std;
class Node
{
int data;
struct node *parent;
struct node *child;
public :
Node(int data){
this.data = data;
}
int GetData(){
return this.data;
}
};
/*
Class DList Declaration
*/
class DList
{
Node* head;
Node* tail;
public:
DList(){
*head = NULL;
*tail = NULL;
}
DList( const DList& obj){
*head = *obj.head;
*tail = *obj.tail;
}
void pushFront(int value);
void pushEnd(int value);
Node* popFront();
Node* popEnd();
void printListForward();
void printListBackward();
};
/*
* Insertion at the beginning
*/
void double_llist::pushFront(int value)
{
Node* newNode = new Node(value);
newNode->parent = NULL;
if (head == NULL)
{
head = newNode;
newNode->child = NULL;
tail = head;
}else{
newNode->child = head;
head = newNode;
}
}
/*
* Insertion of element at the end position
*/
void double_llist::pushEnd(int value)
{
Node* newNode = new Node(value);
if (head == NULL)
{
head = newNode;
newNode->parent = NULL;
}else{
newNode->parent = tail;
tail->child = newNode;
}
newNode->child = NULL;
tail = newNode;
}
/*
* Deletion of element from the list from front
*/
Node* double_llist::popFront()
{
Node* nodeToReturn = head;
head = head->child;
head->parent = NULL;
nodeToReturn->child = NULL;
return nodeToReturn;
}
/*
* Delete from last of the list
*/
Node* double_llist::popEnd()
{
Node* nodeToReturn = tail;
tail = tail->parent;
tail->child = NULL;
nodeToReturn->parent = NULL;
return nodeToReturn;
}
/*
* Display elements of Doubly Link List
*/
void double_llist::printListForward()
{
Node *q;
if (head == NULL)
{
cout<<\"List empty,nothing to display\"<<endl;
return;
}
q = head;
cout<<\"The Doubly Link List is :\"<<endl;
while (q != NULL)
{
cout<<q->data<<\" \";
q = q->child;
}
}
/*
* Display elements of Doubly Link List in reverse
*/
void double_llist::printListBackward()
{
Node *q;
if (head == NULL)
{
cout<<\"List empty,nothing to display\"<<endl;
return;
}
q = tail;
cout<<\"The Doubly Link List in reverse is :\"<<endl;
while (q != NULL)
{
cout<<q->data<<\" \";
q = q->parent;
}
}


