HELLO I NEED THIS TO BE PROGRAMMED IN C ONLY Chapter 17 Lab
HELLO, I NEED THIS TO BE PROGRAMMED IN C++ ONLY ....
Chapter 17 Lab - Single Linked List (SLL)
Due: Before Class Period on Friday 3/03/17
Tasks:
Design and code your own single liked list to hold a list of integers using forward method.
Use the C++ “struct” structure to create your nodes. Node position numbering should start with one.
Your program should include the main program to test and demonstrate one function for each list operations including:
Main with menu (20 points)
AddNode – Add a node at start of the list (10 points)
PrintList – Print the list one node per line (10 points)
AppendNode – Add a node at end of the list (10 points)
InsertNode – Inserts a node at any position in the list (10 points)
DeleteNode – Deletes a node from any position in the list (10 points)
DeleteList – Deletes all nodes from the list (10 points)
SearchList – Search a list for a value and if found returns True otherwise False (10 points)
ResverseList – Reverses the order of items in the list (10 points)
SortList – Sorts the list in ascending order (10 points)
Solution
#include<iostream>
 #include<cstdio>
 #include<cstdlib>
 using namespace std;
 /*
 * Node Declaration
 */
 struct node
 {
 int info;
 struct node *next;
 }*start;
 
 /*
 * Class Declaration
 */
 class single_llist
 {
 public:
 node* create_node(int);
 void insert_begin();
 void insert_pos();
 void insert_last();
 void delete_pos();
 void sort();
 void search();
 void update();
 void reverse();
 void display();
 single_llist()
 {
 start = NULL;
 }
 };
 
 /*
 * Main :contains menu
 */
 main()
 {
 int choice, nodes, element, position, i;
 single_llist sl;
 start = NULL;
 while (1)
 {
 cout<<endl<<\"---------------------------------\"<<endl;
  cout<<endl<<\"Operations on singly linked list\"<<endl;
 cout<<endl<<\"---------------------------------\"<<endl;
  cout<<\"1.Insert Node at beginning\"<<endl;
 cout<<\"2.Insert node at last\"<<endl;
 cout<<\"3.Insert node at position\"<<endl;
 cout<<\"4.Sort Link List\"<<endl;
 cout<<\"5.Delete a Particular Node\"<<endl;
 cout<<\"6.Update Node Value\"<<endl;
 cout<<\"7.Search Element\"<<endl;
 cout<<\"8.Display Linked List\"<<endl;
 cout<<\"9.Reverse Linked List \"<<endl;
 cout<<\"10.Exit \"<<endl;
 cout<<\"Enter your choice : \";
 cin>>choice;
 switch(choice)
 {
 case 1:
 cout<<\"Inserting Node at Beginning: \"<<endl;
 sl.insert_begin();
 cout<<endl;
 break;
 case 2:
 cout<<\"Inserting Node at Last: \"<<endl;
 sl.insert_last();
 cout<<endl;
 break;
 case 3:
 cout<<\"Inserting Node at a given position:\"<<endl;
 sl.insert_pos();
 cout<<endl;
 break;
 case 4:
 cout<<\"Sort Link List: \"<<endl;
 sl.sort();
 cout<<endl;
 break;
 case 5:
 cout<<\"Delete a particular node: \"<<endl;
 sl.delete_pos();
 break;
 case 6:
 cout<<\"Update Node Value:\"<<endl;
 sl.update();
 cout<<endl;
 break;
 case 7:
 cout<<\"Search element in Link List: \"<<endl;
 sl.search();
 cout<<endl;
 break;
 case 8:
 cout<<\"Display elements of link list\"<<endl;
 sl.display();
 cout<<endl;
 break;
 case 9:
 cout<<\"Reverse elements of Link List\"<<endl;
 sl.reverse();
 cout<<endl;
 break;
 case 10:
 cout<<\"Exiting...\"<<endl;
 exit(1);
 break;
 default:
 cout<<\"Wrong choice\"<<endl;
 }
 }
 }
 
 /*
 * Creating Node
 */
 node *single_llist::create_node(int value)
 {
 struct node *temp, *s;
 temp = new(struct node);
 if (temp == NULL)
 {
 cout<<\"Memory not allocated \"<<endl;
 return 0;
 }
 else
 {
 temp->info = value;
 temp->next = NULL;   
 return temp;
 }
 }
 
 /*
 * Inserting element in beginning
 */
 void single_llist::insert_begin()
 {
 int value;
 cout<<\"Enter the value to be inserted: \";
 cin>>value;
 struct node *temp, *p;
 temp = create_node(value);
 if (start == NULL)
 {
 start = temp;
 start->next = NULL;
 }
 else
 {
 p = start;
 start = temp;
 start->next = p;
 }
 cout<<\"Element Inserted at beginning\"<<endl;
 }
 
 /*
 * Inserting Node at last
 */
 void single_llist::insert_last()
 {
 int value;
 cout<<\"Enter the value to be inserted: \";
 cin>>value;
 struct node *temp, *s;
 temp = create_node(value);
 s = start;
 while (s->next != NULL)
 {   
 s = s->next;
 }
 temp->next = NULL;
 s->next = temp;
 cout<<\"Element Inserted at last\"<<endl;
 }
 
 /*
 * Insertion of node at a given position
 */
 void single_llist::insert_pos()
 {
 int value, pos, counter = 0;
 cout<<\"Enter the value to be inserted: \";
 cin>>value;
 struct node *temp, *s, *ptr;
 temp = create_node(value);
 cout<<\"Enter the postion at which node to be inserted: \";
 cin>>pos;
 int i;
 s = start;
 while (s != NULL)
 {
 s = s->next;
 counter++;
 }
 if (pos == 1)
 {
 if (start == NULL)
 {
 start = temp;
 start->next = NULL;
 }
 else
 {
 ptr = start;
 start = temp;
 start->next = ptr;
 }
 }
 else if (pos > 1 && pos <= counter)
 {
 s = start;
 for (i = 1; i < pos; i++)
 {
 ptr = s;
 s = s->next;
 }
 ptr->next = temp;
 temp->next = s;
 }
 else
 {
 cout<<\"Positon out of range\"<<endl;
 }
 }
 
 /*
 * Sorting Link List
 */
 void single_llist::sort()
 {
 struct node *ptr, *s;
 int value;
 if (start == NULL)
 {
 cout<<\"The List is empty\"<<endl;
 return;
 }
 ptr = start;
 while (ptr != NULL)
 {
 for (s = ptr->next;s !=NULL;s = s->next)
 {
 if (ptr->info > s->info)
 {
 value = ptr->info;
 ptr->info = s->info;
 s->info = value;
 }
 }
 ptr = ptr->next;
 }
 }
 
 /*
 * Delete element at a given position
 */
 void single_llist::delete_pos()
 {
 int pos, i, counter = 0;
 if (start == NULL)
 {
 cout<<\"List is empty\"<<endl;
 return;
 }
 cout<<\"Enter the position of value to be deleted: \";
 cin>>pos;
 struct node *s, *ptr;
 s = start;
 if (pos == 1)
 {
 start = s->next;
 }
 else
 {
 while (s != NULL)
 {
 s = s->next;
 counter++;
 }
 if (pos > 0 && pos <= counter)
 {
 s = start;
 for (i = 1;i < pos;i++)
 {
 ptr = s;
 s = s->next;
 }
 ptr->next = s->next;
 }
 else
 {
 cout<<\"Position out of range\"<<endl;
 }
 free(s);
 cout<<\"Element Deleted\"<<endl;
 }
 }
 
 /*
 * Update a given Node
 */
 void single_llist::update()
 {
 int value, pos, i;
 if (start == NULL)
 {
 cout<<\"List is empty\"<<endl;
 return;
 }
 cout<<\"Enter the node postion to be updated: \";
 cin>>pos;
 cout<<\"Enter the new value: \";
 cin>>value;
 struct node *s, *ptr;
 s = start;
 if (pos == 1)
 {
 start->info = value;
 }
 else
 {
 for (i = 0;i < pos - 1;i++)
 {
 if (s == NULL)
 {
 cout<<\"There are less than \"<<pos<<\" elements\";
 return;
 }
 s = s->next;
 }
 s->info = value;
 }
 cout<<\"Node Updated\"<<endl;
 }
 
 /*
 * Searching an element
 */
 void single_llist::search()
 {
 int value, pos = 0;
 bool flag = false;
 if (start == NULL)
 {
 cout<<\"List is empty\"<<endl;
 return;
 }
 cout<<\"Enter the value to be searched: \";
 cin>>value;
 struct node *s;
 s = start;
 while (s != NULL)
 {
 pos++;
 if (s->info == value)
 {
 flag = true;
 cout<<\"Element \"<<value<<\" is found at position \"<<pos<<endl;
 }
 s = s->next;
 }
 if (!flag)
 cout<<\"Element \"<<value<<\" not found in the list\"<<endl;
 }
 
 /*
 * Reverse Link List
 */
 void single_llist::reverse()
 {
 struct node *ptr1, *ptr2, *ptr3;
 if (start == NULL)
 {
 cout<<\"List is empty\"<<endl;
 return;
 }
 if (start->next == NULL)
 {
 return;
 }
 ptr1 = start;
 ptr2 = ptr1->next;
 ptr3 = ptr2->next;
 ptr1->next = NULL;
 ptr2->next = ptr1;
 while (ptr3 != NULL)
 {
 ptr1 = ptr2;
 ptr2 = ptr3;
 ptr3 = ptr3->next;
 ptr2->next = ptr1;   
 }
 start = ptr2;
 }
 
 /*
 * Display Elements of a link list
 */
 void single_llist::display()
 {
 struct node *temp;
 if (start == NULL)
 {
 cout<<\"The List is Empty\"<<endl;
 return;
 }
 temp = start;
 cout<<\"Elements of list are: \"<<endl;
 while (temp != NULL)
 {
 cout<<temp->info<<\"->\";
 temp = temp->next;
 }
 cout<<\"NULL\"<<endl;
 }








