Archive
C++ Program to implement Generic Classes for maintaining Linked List – Q27
Q27. Program to implement Generic Classes for maintaining Linked List:
Create a Template class that implements a singly-linked list. The linked list class should include following member functions-
push_front( ), push_back( ), push_at_any( ), remove_first( ), remove_last( ) & remove_at _any( ).
There may be a private data member size to keep track of no. of items remaining at any given point of time.
… from College notes (BCA/MCA assignments):
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> template <class T> class NODE{ private: T elm, key; NODE *next; public: void addNodeBeg(NODE **); void addNodeEnd(NODE **); void addNodePos(NODE **); void deleteNode(NODE **); void displayList(NODE *); }; template <class T> void NODE<T> :: addNodeBeg(NODE<T> **node){ NODE *temp; cout<<"\n Enter a Value: "; cin>>key; if(*node == NULL){ // list is Empty. *node = new(NODE); (*node)->elm = key; (*node)->next = NULL; } else{ // list is not empty. temp = new(NODE); temp->elm = key; temp->next = *node; *node = temp; } } template <class T> void NODE<T> :: addNodeEnd(NODE<T> **node){ NODE *temp; cout<<"\n Enter a Value: "; cin>>key; if(*node == NULL){ // list is Empty. *node = new(NODE); (*node)->elm = key; (*node)->next = NULL; } else{ // list is not empty. temp = *node; while(temp->next != NULL) temp = temp->next; temp->next = new(NODE); temp = temp->next; temp->elm = key; temp->next = NULL; } } template <class T> void NODE<T> :: addNodePos(NODE<T> **node){ NODE *temp, *ntemp; int pos, i=1; cout<<"\n Enter a Position No.: "; cin>>pos; cout<<"\n Enter a Key: "; cin>>key; if(*node == NULL){ // list is Empty. cout<<"\n List is Empty."; return ; } temp = *node; while(1){ if( (temp->next == NULL) || (i == pos) ) break; temp = temp->next; i++; } ntemp = new(NODE); ntemp->elm = key; ntemp->next = temp->next; temp->next = ntemp; } template <class T> void NODE<T> :: deleteNode(NODE<T> **node){ NODE *temp, *prev; int i=0; cout<<"\n Enter an Element of List to Delete: "; cin>>key; temp = *node; prev = temp; while(1){ if(*node == NULL){ // list is Empty. cout<<"\n List is Empty."; return; } else if(temp->elm == key){ // Element Found. if(i == 0){ // if Element is First Node. (*node) = (*node)->next; cout<<"\n First Node Deleted."; return; } else break; } else if(temp->next == NULL){ cout<<"\n Element not Found."; return; } i++; prev = temp; temp = temp->next; } prev->next = temp->next; cout<<"\n Element Deleted."; } template <class T> void NODE<T> :: displayList(NODE<T> *node){ int i=1; cout<<"\n\t List: "; if(node == NULL) cout<<" List is Empty."; while(node != NULL){ cout<<"\t"<<node->elm; node = node->next; i++; } } int _menu(){ int _ch; cout<<"\n List Type:- \n"; cout<<"\n 1 -> Integer."; cout<<"\n 2 -> Float."; cout<<"\n 3 -> Character."; cout<<"\n Enter your choice: "; cin>>_ch; return (_ch); } void main(){ int ch1, ch2; NODE<int> int_list; NODE<float> float_list; NODE<char> char_list; NODE<int> *int_start = NULL; NODE<float> *float_start = NULL; NODE<char> *char_start = NULL; while(1){ clrscr(); cout<<"\n LINK LIST PROGRAM"; cout<<"\n ~~~~~~~~~~~~~~~~~ \n"; cout<<"\n 1 -> Add Node at Begining."; cout<<"\n 2 -> Add Node at End."; cout<<"\n 3 -> Add Node at Position."; cout<<"\n 4 -> Delete Node."; cout<<"\n 5 -> Display List."; cout<<"\n 6 -> Exit."; cout<<"\n Enter your choice: "; cin>>ch1; switch(ch1){ case 1: // Add node at Begining. ch2 = _menu(); switch(ch2){ case 1: cout<<"\n Enter an Integer Value: "; int_list.addNodeBeg(&int_start); break; case 2: cout<<"\n Enter a Float Value:”; float_list.addNodeBeg(&float_start); break; case 3: cout<<"\n Enter a Character: "; char_list.addNodeBeg(&char_start); break; default: cout<<"\n Wrong Entry. No operation Done."; } break; case 2: // Add node at End. ch2 = _menu(); switch(ch2){ case 1: cout<<"\n Enter an Integer Value: "; int_list.addNodeEnd(&int_start); break; case 2: cout<<"\n Enter a Float Value:"; float_list.addNodeEnd(&float_start); break; case 3: cout<<"\n Enter a Character: "; char_list.addNodeEnd(&char_start); break; default: cout<<"\n Wrong Entry. No operation Done."; } break; case 3: // Add node at Position. ch2 = _menu(); switch(ch2){ case 1: cout<<"\n Enter an Integer Value: "; int_list.addNodePos(&int_start); break; case 2: cout<<"\n Enter a Float Value:"; float_list.addNodePos(&float_start); break; case 3: cout<<"\n Enter a Character: "; char_list.addNodePos(&char_start); break; default: cout<<"\n Wrong Entry. No operation Done."; } break; case 4: // Delete Node. ch2 = _menu(); switch(ch2){ case 1: cout<<"\n Enter an Integer Value: "; int_list.deleteNode(&int_start); break; case 2: cout<<"\n Enter a Float Value:"; float_list.deleteNode(&float_start); break; case 3: cout<<"\n Enter a Character: "; char_list.deleteNode(&char_start); break; default: cout<<"\n Wrong Entry. No operation Done."; } break; case 5: // Display List. cout<<"\n\n Integer List: - "; int_list.displayList(int_start); cout<<"\n\n Float List: - "; float_list.displayList(float_start); cout<<"\n\n Character List: - "; char_list.displayList(char_start); break; default: exit(1); } getch(); } }
Output:
LINK LIST PROGRAM
1 -> Add Node at Begining.
2 -> Add Node at End.
3 -> Add Node at Position.
4 -> Delete Node.
5 -> Display List.
6 -> Exit.
Enter your choice: 5
Integer List: –
List: 3 90 44 45 23 45
Float List: –
List: 90.449997 23.440001 12.34
Character List: –
List: e r
C++ Program to implement Generic classes for maintaining Stack – Q26
Q26. Program to implement Generic classes for maintaining Stack:
Implement Stacks using generic classes with member functions PUSH, POP and DISPLAY. The Program should show implementation of Stack class with at least three different objects.
… from College notes (BCA/MCA assignments):
#include <iostream.h> #include <conio.h> #include <stdlib.h> template <class T> class Cstack{ private: T arr[10]; int ptr; public: void init(){ ptr = -1; } void push(T, int); T pop(int &); void clear(); void display(int); }; template <class T> void Cstack<T> :: push(T elm_push, int t_ptr){ if(t_ptr >= 9) cout<<"\n STACK OVERFLOW."; else arr[++t_ptr] = elm_push; } template <class T> T Cstack<T> :: pop(int &t_ptr){ T elm_pop; if(t_ptr <= -1) cout<<"\n STACK UNDERFLOW."; else{ elm_pop = arr[t_ptr--]; cout<<"\n POPPED value is : "<<elm_pop; return elm_pop; } return 0; } template <class T> void Cstack<T> :: clear(){ ptr = -1; cout<<"\n STACK Cleared."; } template <class T> void Cstack<T> :: display(int t_ptr){ cout<<"\n STACK: "; if(t_ptr == -1) cout<<" Empty"; else for(int i=0; i<=t_ptr; i++) cout<<arr[i]<<" "; } int _menu(){ int _ch; cout<<"\n STACK Type:- \n"; cout<<"\n 1 -> Integer."; cout<<"\n 2 -> Float."; cout<<"\n 3 -> Character."; cout<<"\n Enter your choice: "; cin>>_ch; return (_ch); } void main(){ int ch, i_ptr = -1, f_ptr = -1, c_ptr = -1; int i_num; float f_num; char c_num; Cstack<int> Oint; Cstack<float> Ofloat; Cstack<char> Ochar; Oint.init(); while(1){ clrscr(); cout<<"\n STACK - OPERATION"; cout<<"\n ~~~~~~~~~~~~~~~~~ \n"; cout<<"\n 1 -> PUSH"; cout<<"\n 2 -> POP"; cout<<"\n 3 -> CLEAR"; cout<<"\n 4 -> DISPLAY"; cout<<"\n 5 -> EXIT"; cout<<"\n Enter your choice: "; cin>>ch; switch(ch){ case 1: // PUSH ch = _menu(); switch(ch){ case 1: cout<<"\n Enter an Integer Value to push: "; cin>>i_num; Oint.push(i_num, i_ptr); i_ptr++; break; case 2: cout<<"\n Enter a Float Value to push: "; cin>>f_num; Ofloat.push(f_num, f_ptr); f_ptr++; break; case 3: cout<<"\n Enter a Character to push: "; cin>>c_num; Oint.push(c_num, c_ptr); c_ptr++; break; default: cout<<"\n Wrong Choice. No Operation Done."; } break; case 2: // POP ch = _menu(); switch(ch){ case 1: Oint.pop(i_ptr); i_ptr--; break; case 2: Ofloat.pop(f_ptr); f_ptr--; break; case 3: Ochar.pop(c_ptr); c_ptr--; break; default: cout<<"\n Wrong Choice. No Operation Done."; } break; case 3: // CLEAR ch = _menu(); switch(ch){ case 1: Oint.clear(); i_ptr = -1; break; case 2: Ofloat.clear(); c_ptr = -1; break; case 3: Ochar.clear(); c_ptr = -1; break; default: cout<<"\n Wrong Choice. No Operation Done."; } break; case 4: // DISPLAY cout<<"\n\n Integer Stack:-"; Oint.display(i_ptr); cout<<"\n\n Float Stack:-"; Ofloat.display(f_ptr); cout<<"\n\n Character Stack:-"; Ochar.display(c_ptr); break; case 5: // EXIT cout<<"\n\n You chose to EXIT"; getch(); exit(1); default: cout<<"\n\n Enter an appropriate choice."; } // end of switch. getch(); } // end of while. }// end of main.
Output:
STACK – OPERATION
1 -> PUSH
2 -> POP
3 -> CLEAR
4 -> DISPLAY
5 -> EXIT
Enter your choice: 1
STACK Type:-
1 -> Integer.
2 -> Float.
3 -> Character.
Enter your choice: 1
Enter an Integer Value to push: 43
STACK – OPERATION
1 -> PUSH
2 -> POP
3 -> CLEAR
4 -> DISPLAY
5 -> EXIT
Enter your choice: 4
Integer Stack:-
STACK: 43 119 23
Float Stack:-
STACK: 34.549999 78.900002
Character Stack:-
STACK: a n r
C++ Program to implement Generic Classes for user defined maths library – Q25
Q25. Program to implement Generic Classes for user defined maths library:
Create a user defined maths class for implementing following functions using the concept of generic classes – SUM, N_ROOT, PRODUCT, POWER
… from College notes (BCA/MCA assignments):
#include <iostream.h> #include <stdlib.h> #include <conio.h> #include <math.h> template <class T> class Cmath{ private: T n1, n2, n3; public: void getData(); void Sum(); void nRoot(); void Product(); void Power(); }; template <class T> void Cmath<T> :: getData(){ cout<<"\n Enter 1st Number : "; cin>>n1; cout<<"\n Enter 2nd Number : "; cin>>n2; } template <class T> void Cmath<T> :: Sum(){ n3 = n1 + n2; cout<<"\n Sum = "<<n3; } template <class T> void Cmath<T> :: nRoot(){ n3 = sqrt(n1); cout<<"\n Sq Root of "<<n1<<" = "<<n3; n3 = sqrt(n2); cout<<"\n Sq Root of "<<n2<<" = "<<n3; } template <class T> void Cmath<T> :: Product(){ n3 = n1 * n2; cout<<"\n Product = "<<n3; } template <class T> void Cmath<T> :: Power(){ n3 = pow(n1, n2); cout<<"\n Power = "<<n3; } void main(){ int ch; Cmath<int> Obj_i; Cmath<float> Obj_f; while(1){ clrscr(); cout<<"\n Generic Classes"; cout<<"\n ~~~~~~~~~~~~~~~\n"; cout<<"\n 1 -> Sum."; cout<<"\n 2 -> Root."; cout<<"\n 3 -> Product."; cout<<"\n 4 -> Power."; cout<<"\n 5 -> Exit."; cout<<"\n\n Enter your choice: "; cin>>ch; switch(ch){ case 1: // Sum. cout<<"\n Integer:- "; Obj_i.getData(); Obj_i.Sum(); cout<<"\n Floating:- "; Obj_f.getData(); Obj_f.Sum(); break; case 2: // Root. cout<<"\n Integer:- "; Obj_i.getData(); Obj_i.nRoot(); cout<<"\n Floating:- "; Obj_f.getData(); Obj_f.nRoot(); break; case 3: // Root. cout<<"\n Integer:- "; Obj_i.getData(); Obj_i.Product(); cout<<"\n Floating:-"; Obj_f.getData(); Obj_f.Product(); break; case 4: // Power. cout<<"\n Integer:- "; Obj_i.getData(); Obj_i.Power(); cout<<"\n Floating:-"; Obj_f.getData(); Obj_f.Power(); break; case 5: // Exit. exit(1); } // end of switch. getch(); } // end of while. } // end of main.
Output:
Generic Classes
1 -> Sum.
2 -> Root.
3 -> Product.
4 -> Power.
5 -> Exit.
Enter your choice: 1
Integer:-
Enter 1st Number : 23
Enter 2nd Number : 32
Sum = 55
Floating:-
Enter 1st Number : 23.22
Enter 2nd Number : 32.45
Sum = 55.669998
Generic Classes
1 -> Sum.
2 -> Root.
3 -> Product.
4 -> Power.
5 -> Exit.
Enter your choice: 4
Integer:-
Enter 1st Number : 2
Enter 2nd Number : 5
Power = 32
Floating:-
Enter 1st Number : 23.44
Enter 2nd Number : 4.5
Power = 1461535.25