Code:
#include iostream
#include cstdio
#include cstdlib
#include cstring
using namespace std;
/*
* Node Declaration
*/
struct node
{
char info;
int counter;
struct node *next;
}*start;
/*
* Class Declaration
*/
class self_list
{
public:
node* create_node(char);
void insert_last(char);
void insert_begin(char);
void delete_pos(int);
void display();
void sort();
void move_to_front();
int search(char);
void transpose();
void count();
self_list()
{
start = NULL;
}
};
/*
* Main :contains menu
*/
int main()
{
int choice, position;
char element;
self_list sl;
start = NULL;
while (1)
{
cout<
cout<
cout<
cout<<"1.Insert Node at first"<
cout<<"2.Insert Node at last"<
cout<<"3.Delete a Particular Node"<
cout<<"4.Display List"<
cout<<"5.Move To Front Organising List"<
cout<<"6.Transpose Organising List"<
cout<<"7.Count Organising List"<
cout<<"8.Exit "<
cout<<"Enter your choice : ";
cin>>choice;
switch(choice)
{
case 1:
cout<<"Inserting Element at first"<
cout<<"Enter the character to be inserted: ";
cin>>element;
sl.insert_begin(element);
cout<
break;
case 2:
cout<<"Inserting Element at last"<
cout<<"Enter the character to be inserted: ";
cin>>element;
sl.insert_last(element);
cout<
break;
case 3:
cout<<"Deleteing element at a given position"<
cout<<"Enter the position of element to be deleted: ";
cin>>position;
sl.delete_pos(position);
cout<
break;
case 4:
cout<<"Display elements of link list"<
sl.display();
cout<
break;
case 5:
cout<<"Move To Front Organising List"<
sl.move_to_front();
cout<
break;
case 6:
cout<<"Transpose Organising List"<
sl.transpose();
cout<
break;
case 7:
cout<<"Count Organising List"<
sl.count();
cout<
break;
case 8:
cout<<"Exiting..."<
exit(1);
break;
default:
cout<<"Wrong choice"<
}
}
return 0;
}
/*
* Creating Node
*/
node *self_list::create_node(char value)
{
struct node *temp;
temp = new(struct node);
if (temp == NULL)
{
cout<<"Memory not allocated "<
return 0;
}
else
{
temp->info = value;
temp->next = NULL;
temp->counter = 0;
return temp;
}
}
/*
* Inserting Node at last
*/
void self_list::insert_last(char value)
{
struct node *temp, *s;
temp = create_node(value);
if (start == NULL)
{
start = temp;
return;
}
s = start;
while (s->next != NULL)
{
s = s->next;
}
temp->next = NULL;
s->next = temp;
cout<<"Element Inserted"<
}
/*
* Inserting Node at beginning
*/
void self_list::insert_begin(char 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;
}
}
/*
* Delete element at a given position
*/
void self_list::delete_pos(int pos)
{
int i, key = 0;;
if (start == NULL)
{
return;
}
struct node *s, *ptr;
s = start;
if (pos == 1)
{
start = s->next;
}
else
{
while (s != NULL)
{
s = s->next;
key++;
}
if (pos > 0 && pos <= key)
{
s = start;
for (i = 1;i < pos;i++)
{
ptr = s;
s = s->next;
}
ptr->next = s->next;
}
free(s);
}
}
/*
* Searching an element
*/
int self_list::search(char value)
{
int pos = 0;
bool flag = false;
if (start == NULL)
{
return 0;
}
struct node *s;
s = start;
while (s != NULL)
{
pos++;
if (s->info == value)
{
flag = true;
return pos;
}
s = s->next;
}
if (!flag)
return 0;
}
/*
* Sorting Link List
*/
void self_list::sort()
{
struct node *ptr, *s;
int value, temp;
if (start == NULL)
{
return;
}
ptr = start;
while (ptr != NULL)
{
for (s = ptr->next;s != NULL;s = s->next )
{
if (ptr->counter < s->counter)
{
value = ptr->info;
temp = ptr->counter;
ptr->info = s->info;
ptr->counter = s->counter;
s->info = value;
s->counter = temp;
}
}
ptr = ptr->next;
}
}
/*
* Display Elements
*/
void self_list::display()
{
struct node *temp;
if (start == NULL)
{
cout<<"The List is Empty, nothing to display"<
return;
}
temp = start;
while (temp != NULL)
{
cout<
temp = temp->next;
}
cout<<"NULL"<
}
/*
* Move To Front Self Organizind List
*/
void self_list::move_to_front()
{
if (start == NULL)
{
cout<<"The List is Empty, first create the list"<
return;
}
char stream[100001];
cout<<"Enter the string of elements searched"<
cin>>stream;
int len, pos;
len = strlen(stream);
for (int i = 0;i < len;i++)
{
if (search(stream[i]) != 0)
{
if (search(stream[i]) != 1)
{
pos = search(stream[i]);
delete_pos(pos);
insert_begin(stream[i]);
}
cout<
display();
}
}
}
/*
* Transpose Self Organizind List
*/
void self_list::transpose()
{
if (start == NULL)
{
cout<<"The List is Empty, first create the list"<
return;
}
char stream[100001];
cout<<"Enter the string of elements searched"<
cin>>stream;
int len, pos, temp;
len = strlen(stream);
struct node *s;
for (int i = 0;i < len;i++)
{
s = start;
if (search(stream[i]) != 0)
{
if(search(stream[i]) != 1)
{
pos = search(stream[i]);
for (int j = 1;j < pos - 1;j++)
{
s = s->next;
}
temp = s->info;
s->info = s->next->info;
s->next->info = temp;
}
cout<
display();
}
}
}
/*
* Count Self Organizind List
*/
void self_list::count()
{
if (start == NULL)
{
cout<<"The List is Empty, first create the list"<
return;
}
char stream[100001];
cout<<"Enter the string of elements searched"<
cin>>stream;
int len,pos;
len = strlen(stream);
struct node *s;
for (int i = 0;i < len;i++)
{
s = start;
if (search(stream[i]) != 0)
{
pos = search(stream[i]);
for (int j = 0;j < pos - 1;j++)
{
s = s->next;
}
(s->counter)++;
sort();
cout<
display();
}
}
}
Output:
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 1
Inserting Element at first
Enter the character to be inserted: A
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 4
Display elements of link list
A->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 2
Inserting Element at last
Enter the character to be inserted: B
Element Inserted
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 2
Inserting Element at last
Enter the character to be inserted: C
Element Inserted
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 4
Display elements of link list
A->B->C->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 2
Inserting Element at last
Enter the character to be inserted: D
Element Inserted
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 1
Inserting Element at first
Enter the character to be inserted: E
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 4
Display elements of link list
E->A->B->C->D->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 2
Inserting Element at last
Enter the character to be inserted: F
Element Inserted
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 4
Display elements of link list
E->A->B->C->D->F->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 3
Deleteing element at a given position
Enter the position of element to be deleted: 6
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 4
Display elements of link list
E->A->B->C->D->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 5
Move To Front Organising List
Enter the string of elements searched
DEICABLMIONECBAYCE
D: D->E->A->B->C->NULL
E: E->D->A->B->C->NULL
C: C->E->D->A->B->NULL
A: A->C->E->D->B->NULL
B: B->A->C->E->D->NULL
E: E->B->A->C->D->NULL
C: C->E->B->A->D->NULL
B: B->C->E->A->D->NULL
A: A->B->C->E->D->NULL
C: C->A->B->E->D->NULL
E: E->C->A->B->D->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 6
Transpose Organising List
Enter the string of elements searched
DEICABLMIONECBAYCE
D: E->C->A->D->B->NULL
E: E->C->A->D->B->NULL
C: C->E->A->D->B->NULL
A: C->A->E->D->B->NULL
B: C->A->E->B->D->NULL
E: C->E->A->B->D->NULL
C: C->E->A->B->D->NULL
B: C->E->B->A->D->NULL
A: C->E->A->B->D->NULL
C: C->E->A->B->D->NULL
E: E->C->A->B->D->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 4
Display elements of link list
E->C->A->B->D->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 7
Count Organising List
Enter the string of elements searched
DEICABLMIONECBAYCE
D: D->C->A->B->E->NULL
E: D->E->A->B->C->NULL
C: D->E->C->B->A->NULL
A: D->E->C->A->B->NULL
B: D->E->C->A->B->NULL
E: E->D->C->A->B->NULL
C: E->C->D->A->B->NULL
B: E->C->B->A->D->NULL
A: E->C->B->A->D->NULL
C: C->E->B->A->D->NULL
E: C->E->B->A->D->NULL
---------------------------------
Operations on Self Organising list
---------------------------------
1.Insert Node at first
2.Insert Node at last
3.Delete a Particular Node
4.Display List
5.Move To Front Organising List
6.Transpose Organising List
7.Count Organising List
8.Exit
Enter your choice : 8
Exiting...
------------------
(program exited with code: 1)
Press return to continue
More C++ Programs: