Department of Computer Engineering has student's club named 'Pinnacle Club'. Students ofSecond, third and final year of department can be granted membership on request. Similarlyone may cancel the membership of club. First node is reserved for president of club and lastnode is reserved for secretary of club. Write C++ program to maintain club member‘sinformation using singly linked list. Store student PRN and Name. Write functions to
a) Add and delete the members as well as president or even secretary.
b) Compute total number of members of club
c) Display members
d) Display list in reverse order using recursion
e) Two linked lists exists for two divisions. Concatenate two lists.
--------------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<cstdlib>
#include<string.h>
//Author : Vivek S. Sharma
//Copyright : Your copyright notice
using namespace std;
struct node{
int prn;
char name[30];
struct node *next;
}*start;
class pinnacle{
public :
node *create(int ,char []);
void add_president();
void add_secretary();
void display();
void add_member();
void d_president();
void d_secretary();
void d_member();
void no_members();
void reverse();
};
int main(){
int choice;
pinnacle sl;
start = NULL;
while (1) {
cout<<"1.Add President"<<endl;
cout<<"2.Add Secretary"<<endl;
cout<<"3.Display"<<endl;
cout<<"4.Add_Member"<<endl;
cout<<"5.Delete President"<<endl;
cout<<"6.Delete Secretary"<<endl;
cout<<"7.Delete Member"<<endl;
cout<<"8.No of members"<<endl;
cout<<"9. Reverse "<<endl;
cout<<"10.Exit "<<endl;
cout<<"Enter your choice : ";
cin>>choice;
switch(choice){
case 1:
cout<<"Add President : "<<endl;
sl.add_president();
cout<<endl;
break;
case 2:
cout<<"Add Secretary : "<<endl;
sl.add_secretary();
cout<<endl;
break;
case 3:
cout<<"Display"<<endl;
sl.display();
cout<<endl;
break;
case 4:
cout<<"Add_Member "<<endl;
sl.add_member();
cout<<endl;
break;
case 5:
cout<<"DElete President "<<endl;
sl.d_president();
cout<<endl;
break;
case 6:
cout<<"Delete Secreatery "<<endl;
sl.d_secretary();
cout<<endl;
break;
case 7:
cout<<"Delete Member "<<endl;
sl.d_member();
cout<<endl;
break;
case 8:
cout<<"Total Members : "<<endl;
sl.no_members();
cout<<endl;
break;
case 9:
cout<<"Reverse Members : "<<endl;
sl.reverse();
cout<<endl;
break;
case 10:
cout<<"Concatenate Members : "<<endl;
// sl.cancatenate();
cout<<endl;
break;
case 0 :cout<<"Exiting"<<endl;
exit(1);
default:
cout<<"Wrong choice"<<endl;
}
}
return 0;
}
node *pinnacle::create(int prn, char name[30]){
struct node *temp;
temp = new(struct node);
if (temp == NULL)
{
cout<<"Memory not allocated "<<endl;
return 0;
}
else
{
strncpy(temp->name, name, 30);
temp->prn = prn;
temp->next = NULL;
return temp;
}
}
void pinnacle:: add_president(){
int prn;
char name[30];
cout<<"Add President : \n Enter prn no. :"<<endl;
cin>>prn;
cout<<"Enter President name : "<<endl;
cin>>name;
struct node *temp, *p;
temp = create(prn,name);
if (start == NULL)
{
start = temp;
start->next = NULL;
}
else
{
p = start;
start = temp;
start->next = p;
}
cout<<"President Inserted at beginning"<<endl;
}
void pinnacle:: add_secretary(){
int prn;
char name[30];
cout<<"Add Secretary : \n Enter prn no. :"<<endl;
cin>>prn;
cout<<"Enter Secretary name : "<<endl;
cin>>name;
struct node *temp, *s;
temp = create(prn,name);
s = start;
while (s->next != NULL)
{
s = s->next;
}
temp->next = NULL;
s->next = temp;
cout<<"Secretary Inserted"<<endl;
}
void pinnacle :: display(){
struct node *temp;
if (start == NULL)
{
cout<<"The List is Empty"<<endl;
return;
}
temp = start;
cout<<"Members of list are: "<<endl;
while (temp != NULL)
{
cout<<"\n \n PRN NO.="<<temp->prn<<" and NAME : "<<(temp->name)<<" \n ";
temp = temp->next;
}
cout<<"NULL"<<endl;
}
void pinnacle :: add_member(){
int prn,counter=0;
char name[30];
cout<<"Add Member : \n Enter prn no. :"<<endl;
cin>>prn;
cout<<"Enter Member name : "<<endl;
cin>>name;
struct node *temp, *s, *ptr;
temp = create(prn,name);
s=start;
while (s != NULL) {
s = s->next;
counter++;
}
if (start == NULL)
{
start = temp;
start->next = NULL;
}
else{
s=start;
for (int i = 1; i < (counter) ; i++)
{
ptr = s;
s = s->next;
}
ptr->next = temp;
temp->next = s;
}}
void pinnacle :: d_president(){
struct node *s;
s = start;
start = s->next;
free(s);
}
void pinnacle :: d_secretary(){
struct node *s;
s=start;
while(s->next->next != NULL){
s=s->next;
}
free(s->next);
s->next=NULL;
}
void pinnacle :: d_member(){
int pos, i, counter = 0;
if (start == NULL){
cout<<"List is empty"<<endl;
return;
}
cout<<"Enter the position of member 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<<"Member Deleted"<<endl;
}
}
void pinnacle :: no_members(){
int count=0;
struct node *s;
s=start;
while(s != NULL){
s=s->next;
count++;
}
cout<<"Number of members in the group = "<<count<<endl;
}
void pinnacle :: 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;
}
--------------------------------------------------------------------------------------------------------------------------
a) Add and delete the members as well as president or even secretary.
b) Compute total number of members of club
c) Display members
d) Display list in reverse order using recursion
e) Two linked lists exists for two divisions. Concatenate two lists.
--------------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<cstdlib>
#include<string.h>
//Author : Vivek S. Sharma
//Copyright : Your copyright notice
using namespace std;
struct node{
int prn;
char name[30];
struct node *next;
}*start;
class pinnacle{
public :
node *create(int ,char []);
void add_president();
void add_secretary();
void display();
void add_member();
void d_president();
void d_secretary();
void d_member();
void no_members();
void reverse();
};
int main(){
int choice;
pinnacle sl;
start = NULL;
while (1) {
cout<<"1.Add President"<<endl;
cout<<"2.Add Secretary"<<endl;
cout<<"3.Display"<<endl;
cout<<"4.Add_Member"<<endl;
cout<<"5.Delete President"<<endl;
cout<<"6.Delete Secretary"<<endl;
cout<<"7.Delete Member"<<endl;
cout<<"8.No of members"<<endl;
cout<<"9. Reverse "<<endl;
cout<<"10.Exit "<<endl;
cout<<"Enter your choice : ";
cin>>choice;
switch(choice){
case 1:
cout<<"Add President : "<<endl;
sl.add_president();
cout<<endl;
break;
case 2:
cout<<"Add Secretary : "<<endl;
sl.add_secretary();
cout<<endl;
break;
case 3:
cout<<"Display"<<endl;
sl.display();
cout<<endl;
break;
case 4:
cout<<"Add_Member "<<endl;
sl.add_member();
cout<<endl;
break;
case 5:
cout<<"DElete President "<<endl;
sl.d_president();
cout<<endl;
break;
case 6:
cout<<"Delete Secreatery "<<endl;
sl.d_secretary();
cout<<endl;
break;
case 7:
cout<<"Delete Member "<<endl;
sl.d_member();
cout<<endl;
break;
case 8:
cout<<"Total Members : "<<endl;
sl.no_members();
cout<<endl;
break;
case 9:
cout<<"Reverse Members : "<<endl;
sl.reverse();
cout<<endl;
break;
case 10:
cout<<"Concatenate Members : "<<endl;
// sl.cancatenate();
cout<<endl;
break;
case 0 :cout<<"Exiting"<<endl;
exit(1);
default:
cout<<"Wrong choice"<<endl;
}
}
return 0;
}
node *pinnacle::create(int prn, char name[30]){
struct node *temp;
temp = new(struct node);
if (temp == NULL)
{
cout<<"Memory not allocated "<<endl;
return 0;
}
else
{
strncpy(temp->name, name, 30);
temp->prn = prn;
temp->next = NULL;
return temp;
}
}
void pinnacle:: add_president(){
int prn;
char name[30];
cout<<"Add President : \n Enter prn no. :"<<endl;
cin>>prn;
cout<<"Enter President name : "<<endl;
cin>>name;
struct node *temp, *p;
temp = create(prn,name);
if (start == NULL)
{
start = temp;
start->next = NULL;
}
else
{
p = start;
start = temp;
start->next = p;
}
cout<<"President Inserted at beginning"<<endl;
}
void pinnacle:: add_secretary(){
int prn;
char name[30];
cout<<"Add Secretary : \n Enter prn no. :"<<endl;
cin>>prn;
cout<<"Enter Secretary name : "<<endl;
cin>>name;
struct node *temp, *s;
temp = create(prn,name);
s = start;
while (s->next != NULL)
{
s = s->next;
}
temp->next = NULL;
s->next = temp;
cout<<"Secretary Inserted"<<endl;
}
void pinnacle :: display(){
struct node *temp;
if (start == NULL)
{
cout<<"The List is Empty"<<endl;
return;
}
temp = start;
cout<<"Members of list are: "<<endl;
while (temp != NULL)
{
cout<<"\n \n PRN NO.="<<temp->prn<<" and NAME : "<<(temp->name)<<" \n ";
temp = temp->next;
}
cout<<"NULL"<<endl;
}
void pinnacle :: add_member(){
int prn,counter=0;
char name[30];
cout<<"Add Member : \n Enter prn no. :"<<endl;
cin>>prn;
cout<<"Enter Member name : "<<endl;
cin>>name;
struct node *temp, *s, *ptr;
temp = create(prn,name);
s=start;
while (s != NULL) {
s = s->next;
counter++;
}
if (start == NULL)
{
start = temp;
start->next = NULL;
}
else{
s=start;
for (int i = 1; i < (counter) ; i++)
{
ptr = s;
s = s->next;
}
ptr->next = temp;
temp->next = s;
}}
void pinnacle :: d_president(){
struct node *s;
s = start;
start = s->next;
free(s);
}
void pinnacle :: d_secretary(){
struct node *s;
s=start;
while(s->next->next != NULL){
s=s->next;
}
free(s->next);
s->next=NULL;
}
void pinnacle :: d_member(){
int pos, i, counter = 0;
if (start == NULL){
cout<<"List is empty"<<endl;
return;
}
cout<<"Enter the position of member 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<<"Member Deleted"<<endl;
}
}
void pinnacle :: no_members(){
int count=0;
struct node *s;
s=start;
while(s != NULL){
s=s->next;
count++;
}
cout<<"Number of members in the group = "<<count<<endl;
}
void pinnacle :: 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;
}
--------------------------------------------------------------------------------------------------------------------------
**If some mistakes, plz let me know!-----Vivek S. Sharma