Здравейте имам задача с условието: Да се състави функция, която извежда на екрана най-често срещания елемент на списък с начален указател START. Имате ли някакви съвети как да направя функцията за най-често срещания елемент?
#include<iostream>
using namespace std;
struct elem {
int key;
elem* next;
elem* prev;
}*start = NULL;
void add_b(int n);
void print_list();
void add_e(int n);
void add_bk(int n, int k);
void add_ak(int n, int k);
void invert_list();
int del_n(int n);
int maxlist();
int main()
{
int ch, n, k;
int br = 0;
do
{
cout << "\n1.Add first";
cout << "\n2.Add last";
cout << "\n3.Add before k";
cout << "\n4.Add after k";
cout << "\n5.Delete n";
cout << "\n6.Invert list";
cout << "\n7.Print list";
cout << "\n8.Max List";
cout << "\nYour ch: ";
cin >> ch;
if (ch < 6)
{
cout << "\n n="; cin >> n;
}
if (ch == 3 || ch == 4) { cout << "\nk= "; cin >> k; }
switch (ch)
{
case 1: {add_b(n); print_list(); break; }
case 2: {add_e(n); print_list(); break; }
case 3: {add_bk(n, k); print_list(); break; }
case 4: {add_ak(n, k); print_list(); break; }
case 5: {del_n(n); print_list(); break; }
case 6: {invert_list(); print_list(); break; }
case 7: {print_list(); break; }
case 8: {maxlist(); break; }
}
} while (ch < 8 && ch>0);
}
void add_b(int n)
{
elem* p = start;
start = new elem;
start->key = n;
start->next = p;
start->prev = NULL;
if (p) p->prev = start;
}
void print_list()
{
if (start)
{
cout << "\nList is: ";
elem* p = start;
while (p)
{
cout << p->key << "\t";
p = p->next;
}
}
else cout << "\n Empty list!";
}
void add_e(int n)
{
elem* q = new elem;
q->next = NULL;
q->key = n;
if (start == NULL) { start = q; q->prev = NULL; }
else
{
elem* p = start;
while (p->next)
p = p->next;
p->next = q;
q->prev = p;
}
}
void add_bk(int n, int k)
{
elem* p = start;
while (p->key != k && p->next)
p = p->next;
if (p->key == k)
{
elem* q = new elem;
q->next = p->next;
q->prev = p;
if (p->next) p->next->prev = q;
p->next = q;
p->key = n;
q->key = k;
}
else cout << "\nNo K";
}
void add_ak(int n, int k)
{
elem* p = start;
while (p->key != k && p->next)
p = p->next;
if (p->key == k)
{
elem* q = new elem;
q->next = p->next;
q->prev = p;
if (p->next) p->next->prev = q;
p->next = q;
q->key = n;
}
else cout << "\nNo K";
}
void invert_list()
{
elem* p = start, * buf = start;
while (p)
{
buf = p->next;
p->next = p->prev;
if (buf == NULL) start = p;
p = buf;
}
}
int del_n(int n)
{
if (start)
{
elem* p = start;
while (p->key != n && p->next)
p = p->next;
if (p->key == n)
{
if (p->next) p->next->prev = p->prev;
if (p->prev) p->prev->next = p->next;
if (start->key == n) start = start->next;
delete p;
return 1;
}
else//if(pi>key==n)
{
cout << "\n Non";
return 0;
}
}
else {
cout << "\n Empty list";
return 0;
}
}