CS301 VU Current Assignment No. 1 Spring 2013 Solution

CS301 VU Current Assignment No. 1 Spring 2013 Solution

Assignment No. 01 SEMESTER Spring 2013 CS301‐ Data Structures
Total Marks: 20
Due Date: 25/04/2013

Assignment:

We know that in linked list we have one value and one pointer (to hold the memory address of next node). Note that it is not compulsory to have only one value. There can be more than one value in one node but the pointer will remain one.

Write a C++ program to implement linked list data structure. In this problem every node should have six values, the name of node and a pointer. Your program should prompt the user to enter total number of nodes in the list. After this give the name to node and save 6 different values in node. Process should be repeated for each node.

After entering values of all the nodes, sum the values in each node and sort the list in ascending order (on the basis of sum calculated in each node) i.e. node with smallest sum comes first and node with largest sum comes last.

Note: Values within a single node should not duplicate. If a user tries to enter any duplicate value WITHIN A NODE then show a warning message and ask user to enter value again.

The diagram given below is showing the sorted list.

IMAGE

Solution Guidelines:
1. First understand the code given in handouts about linked list.
2. To save six different values in one node you can use array as data member of Node class.
3. Get the sum of six values and on comparison of sum of different nodes sort the list.
4. To get the idea about exact output of program, see Demo.wmv file attached with assignment file.

SOLUTION IDEA:

Lecture no 3 and 4 very important for this assignment.

A linked list is a popular data structure to store data in sequential order. Meanwhile, linked list structure allow following operations which overcomes limitation of array: for example
1. Retrieve an element from list.
2. Insert a new element to the list.
3. Delete an element from the list.
4. Find how many elements are in the list.
5. Find a specific element is in the list.
6. Find if this list is empty.

……………

#include <iostream>
#include <conio.h>
using namespace std;
class Node{
public:
void set_next(Node* next_node){Next_Node = next_node;}
Node * get_next(){return Next_Node;}
char * get_name(){return nod_name;}
void set_objects(int,int);
void set_name(char*);
int get_objects(int);
void set_sum(int sums){sum = sums;}
int get_sum(){return sum;}
~Node(){};
private:
int sum;
char *nod_name;
int objects[6];
Node * Next_Node;
};
void Node::set_name(char* name){
nod_name = new char[strlen(name+1)];
strcpy(nod_name,name);
}
void Node::set_objects(int obj,int indux)
{
objects[indux] = obj;
}
int Node::get_objects(int indux)
{
return objects[indux];
}
class List{
public:
List();
void sort(Node*,int);
void display(int);
void get_input(int,Node*);
int get(int);
void add(int[],Node*);
private:
int size;
Node * Head_Node;
Node * Current_Node;
Node * Last_Current_Node;
};
List::List()
{
size = 0;
Head_Node = new Node();
Head_Node->set_next(NULL);
Current_Node = NULL;
Last_Current_Node = NULL;
}
void List::sort(Node * sort_node, int number_nodes)
{
char temp_name[25];
Current_Node = Head_Node;
int * sum = new int[number_nodes];
for(int i=0;i<number_nodes;i++)
{
sum[i] = 0;
if(Current_Node != NULL)
{
for(int a=0;a<6;a++)
{
sum[i] += this->Current_Node->get_objects(a);
}
}
Current_Node->set_sum(sum[i]);
Current_Node = Current_Node->get_next();
}
Current_Node = Head_Node;
Last_Current_Node = Head_Node->get_next();
int temp = 0;
for(int i=0;i<number_nodes;i++)
{
for(int a=0;a<number_nodes;a++)
{
if(Current_Node != NULL && Last_Current_Node != NULL)
{
if(Current_Node->get_sum() < Last_Current_Node->get_sum())
{
temp = Current_Node->get_sum();
strcpy(temp_name , Current_Node->get_name());
Current_Node->set_sum(Last_Current_Node->get_sum());
Current_Node->set_name(Last_Current_Node->get_name());
Last_Current_Node->set_sum(temp);
Last_Current_Node->set_name(temp_name);
}
Last_Current_Node = Last_Current_Node->get_next();
}
else
{
break;
}
}
Last_Current_Node = Head_Node;
Current_Node = Current_Node->get_next();
}
}
void List::display(int number_nods)
{
Current_Node = Head_Node;
if(Current_Node != NULL)
{
cout<<”List Size = “<<size<<endl;
for(int a=0;a<number_nods;a++)
{
cout<<’\n’<<endl;
cout<<’\t’<<”Elements Of: “<<a+1<<’\t’<<Current_Node->get_name()<<endl;
Current_Node = Current_Node->get_next();
}
}
}
void List::get_input(int number_nod,Node * Nodes)
{
int f = 0;
char arrs[25];
for(int i=0;i<number_nod;i++)
{
int arr[6] = {0};
cout<<”Enter The Name OF the Node: “;
cin>>arrs;
Nodes[i].set_name(arrs);
for(int a=0;a<6;a++)
{
f = 0;
cout<<”enter Value “<<a+1<<”: “;
cin>>arr[a];
for(int j=0;j<6;j++)
{
if(arr[a] == arr[j])
{
f++;
}
}
if(f > 1)
{
cout<<arr[a]<<” Duplicated value is not allowed “<<endl;
a–;
continue;
}
}
cout<<endl;
cout<<”Node Value Finshed”<<endl<<endl;
this->add(arr,&Nodes[i]);
}
}
int List::get(int Indux)
{
return Current_Node->get_objects(Indux);
}
void List::add(int objests[],Node * nodss)
{
for(int i=0;i<6;i++)
{
nodss->set_objects(objests[i],i);
}
if(Current_Node == NULL)
{
nodss->set_next(NULL);
Head_Node->set_next(nodss);
Last_Current_Node = Head_Node;
Current_Node = nodss;
Head_Node = Current_Node;
}
else
{
nodss->set_next(Current_Node->get_next());
Current_Node->set_next(nodss);
Last_Current_Node = Current_Node;
Current_Node = nodss;
}
size++;
}
int main()
{
List list;
int number_nods = 0;
cout<<”How many Nodes You want to Create ?? “;
cin>>number_nods;
Node * Nodes = new Node[number_nods];
list.get_input(number_nods,Nodes);
list.sort(Nodes,number_nods);
list.display(number_nods);
delete [] Nodes;
}

…………….

#include <iostream>
#include <conio.h>
using namespace std;
class Node{
public:
void set_next(Node* next_node){Next_Node = next_node;}
Node * get_next(){return Next_Node;}
char * get_name(){return nod_name;}
void set_objects(int,int);
void set_name(char*);
int get_objects(int);
void set_sum(int sums){sum = sums;}
int get_sum(){return sum;}
~Node(){};
private:
int sum;
char *nod_name;
int objects[6];
Node * Next_Node;
};
void Node::set_name(char* name){
nod_name = new char[strlen(name+1)];
strcpy(nod_name,name);
}
void Node::set_objects(int obj,int indux)
{

objects[indux] = obj;
}
int Node::get_objects(int indux)
{
return objects[indux];
}

class List{
public:
List();
void sort(Node*,int);
void display(int);
void get_input(int,Node*);
int get(int);
void add(int[],Node*);
private:
int size;
Node * Head_Node;
Node * Current_Node;
Node * Last_Current_Node;
};
List::List()
{
size = 0;
Head_Node = new Node();
Head_Node->set_next(NULL);
Current_Node = NULL;
Last_Current_Node = NULL;
}
void List::sort(Node * sort_node, int number_nodes)
{
char temp_name[25];
Current_Node = Head_Node;
int * sum = new int[number_nodes];
for(int i=0;i<number_nodes;i++)
{
sum[i] = 0;
if(Current_Node != NULL)
{
for(int a=0;a<6;a++)
{
sum[i] += this->Current_Node->get_objects(a);
}
}
Current_Node->set_sum(sum[i]);
Current_Node = Current_Node->get_next();

}
Current_Node = Head_Node;
Last_Current_Node = Head_Node->get_next();
int temp = 0;
for(int i=0;i<number_nodes;i++)
{

for(int a=0;a<number_nodes;a++)
{

if(Current_Node != NULL && Last_Current_Node != NULL)
{

if(Current_Node->get_sum() < Last_Current_Node->get_sum())
{

temp = Current_Node->get_sum();
strcpy(temp_name , Current_Node->get_name());
Current_Node->set_sum(Last_Current_Node->get_sum());
Current_Node->set_name(Last_Current_Node->get_name());
Last_Current_Node->set_sum(temp);
Last_Current_Node->set_name(temp_name);

}
Last_Current_Node = Last_Current_Node->get_next();
}
else
{
break;
}

}
Last_Current_Node = Head_Node;
Current_Node = Current_Node->get_next();

}
}
void List::display(int number_nods)
{
Current_Node = Head_Node;
if(Current_Node != NULL)
{
cout”List Size = “sizeendl;
for(int a=0;a<number_nods;a++)
{
cout’\n’endl;
cout’\t’”Elements Of: “a+1′\t’Current_Node->get_name()endl;

Current_Node = Current_Node->get_next();
}
}
}
void List::get_input(int number_nod,Node * Nodes)
{
int f = 0;
char arrs[25];
for(int i=0;i<number_nod;i++)
{
int arr[6] = {0};
cout”Enter The Name OF the Node: “;
cin>>arrs;
Nodes[i].set_name(arrs);
for(int a=0;a<6;a++)
{
f = 0;
cout”enter Elements “a+1″: “;
cin>>arr[a];
for(int j=0;j<6;j++)
{
if(arr[a] == arr[j])
{

f++;

}
}
if(f > 1)
{
coutarr[a]” Dublicated”endl;
a–;
continue;
}

}
coutendl;
cout”Node Value Finshed”endlendl;
this->add(arr,&Nodes[i]);
}

}

int List::get(int Indux)
{
return Current_Node->get_objects(Indux);
}
void List::add(int objests[],Node * nodss)
{

for(int i=0;i<6;i++)
{
nodss->set_objects(objests[i],i);
}
if(Current_Node == NULL)
{

nodss->set_next(NULL);
Head_Node->set_next(nodss);
Last_Current_Node = Head_Node;
Current_Node = nodss;
Head_Node = Current_Node;

}
else
{
nodss->set_next(Current_Node->get_next());
Current_Node->set_next(nodss);
Last_Current_Node = Current_Node;
Current_Node = nodss;
}
size++;
}
int main()
{
List list;
int number_nods = 0;
cout”How many Nodes You want to Create: “;
cin>>number_nods;
Node * Nodes = new Node[number_nods];
list.get_input(number_nods,Nodes);
list.sort(Nodes,number_nods);
list.display(number_nods);
delete [] Nodes;
_getch();
}

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s