これが私のコードです。私が得ている問題は、削除部分を機能させることができないことです。構造体の要素を 1 つ削除したい。追加された要素を追加、検索、および削除する基本的な構造は次のとおりです。また、要素は昇順でソートされます。
#include <iostream>
using namespace std;
struct el {
int key;
el *next;
} *start;
void init();
void add(int n);
void list();
void search(int n); // ima za dopylvane
void deleter(int n);
void main() {
init();
int n, num;
do {
cout << "\n Menu\n";
cout << "\n1 - Add element";
cout << "\n2 - List elements";
cout << "\n3 - Searching for element";
cout << "\n4 - Delete element";
cout << "\n5 - Exit";
cout << "\n Your choice:";
cin >> n;
switch (n) {
case 1:
{
cout << "\n Input num:";
cin >> num;
add(num);
break;
}
case 2:
{
list();
break;
}
case 3:
{
cout << "\n Input num for searching:";
cin >> num;
search(num);
break;
}
case 4:
{
cout << "\n Input num for deleting:";
cin >> num;
deleter(num);
break;
}
}
}
while (n != 5);
}
void list() {
el *p = start;
if (start) while (p) {
cout << p->key << " ";
p = p->next;
} else cout << "\n Empty list";
}
void init() {
start = NULL;
}
void add(int n) {
el *p = start;
if (!start) {
start = new el;
start->key = n;
start->next = NULL;
} else {
if (start->key > n) {
start = new el;
start->key = n;
start->next = p;
} else {
el * q;
while ((p->key < n) && (p->next)) {
q = p;
p = p->next;
}
if (p->key > n) {
el *s;
s = new el;
s->key = n;
s->next = p;
q->next = s;
} else {
el *s;
s = new el;
s->key = n;
s->next = NULL;
p->next = s;
}
}
}
}
void search(int n) {
el *p = start;
if (!start) cout << "\nEmpty list!";
else while ((p->key != n) && (p-> next))
p = p->next;
if (p->key == n) cout << "\nYes!";
else cout << "\nNo!";
}
void deleter(int n) {
el *p = start;
if (!start) cout << "Enfsad";
else while ((p->key != n) && (p->next)) {
n = start->key;
start = start->next;
delete p;
}
}