I'm trying to make my own non-STL linked list implementation.
I tried to write a function to find the most common element and print which one it is and how many times we encounter it in the list. I've already added two other functions so that I can add elements in the list and also check if the list works correctly.
For the search function I've thought to search how many times we encounter each of the elements and have a variable that would increase by 1 every time I encounter the the element I'm currently checking. I've managed so far to only have a function that searches for only one element that I have chosen. Not sure how to proceed.
I wanted to be able to modify the function to search for the most common element. Do you have any idea how to achieve what I'm trying to do?
#include <iostream>
using namespace std;
void add_е(int n);
void list();
int search_elem(int n);
struct elem
{
int key;
elem *next;
} *start=NULL;
int main()
{
int ch, num, amount, i, element;
do
{ cout<<"\n\t Menu";
cout<<"\n 1.Add elements";
cout<<"\n 2.Find the most common element";
cout<<"\n 3.Print the stack";
cout<<"\n 4.Exit";
do
{ cout<<"\n Your choice is:";
cin>>ch;
}
while (ch<1||ch>4);
switch(ch)
{
case 1:
cout<<"\n How many elements do you want to add?";
cin>>amount;
for(i=0; i<amount; i++)
{
cout<<"Input stack elements:\n";
cin>>num;
add_е(num);
}
break;
case 2:
cout<<"\n Which element do you want to find? \n ";
cin>>element;
search_elem(element);
break;
case 3: list();
break;
}
}while(ch!=4);
}
void add_е(int n) { elem *p=start, *q=p;
q=new elem;
q->key=n;
q->next=NULL;
if (start)
{
while (p->next)
p=p->next;
p->next=q;
}
else
start=q;
}
void list()
{
if (start)
{
elem *p=start;
cout<<"\n List is: \n";
while (p)
{
cout<<p->key<<"\n";
p=p->next;
}
}
else
cout<<"\n Empty list";
}
int search_elem(int n) // here's what confuses me
{
elem *p=start;
if (start)
{
while ((p->key!=n)&&(p->next))
p=p->next;
if (p->key==n)
{
cout<<"p->key"<<"\n";
return 1;
}
else
cout<<"No element found";
return 0;
}
return 0;
}