respec7_m3
Registered
Здравейте, бих искал някой да ми обясни какво точно прави функцията del на съответните редове, където има коментари на английски, благодаря! (Може с нови по-описателни коментари на местата на сегашните)
Код:
// 2.4.44
#include <iostream>
#include <Windows.h>
using namespace std;
struct elem
{
int key;
elem *next;
elem *prev;
}*start = NULL;
void list()
{
SetConsoleOutputCP(1251);
elem *p = start;
if (start)
{
cout << "Списъкът е: ";
while (p)
{
cout << p->key << " ";
p = p->next;
}
} else cout << "Празен списък";
}
void add()
{
SetConsoleOutputCP(1251);
int n;
cout << "Въведете n: ";
cin >> n;
elem *p = start;
if (start) // Правим проверка дали има нещо в списъка
{
while (p->next) // Ако има нещо, се изпълняват следващите редове
{
p = p->next;
}
elem* q = new elem;
q->key = n;
q->next = NULL;
q->prev = p;
p->next = q;
} else // Ако не се изпълнява else, връщаме се на "Празен списък" и трябва да добавим число
{
start = new elem;
start->next = NULL;
start->prev = NULL;
start->key = n;
}
}
int del(int k = 0) // Функция за изтриване на отрицателно число
{
elem* temp;
elem* p = start;
while (p)
{
if (p->key>k) p = p->next;
else
{ //Fix next node's prev pointer to new prev
if (p->next) {
p->next->prev = p->prev;
} //Fix prev node's next pointer to new next
if (p->prev) {
p->prev->next = p->next;
}
temp = p;
p = p->next; //Save the start pointer, or we might leak later or get in trouble.
if (temp == start) {
start = start->next;
} //Release all pointers of this node.
temp->next = NULL;
temp->prev = NULL;
delete temp;
}
}
return 0;
}
int main()
{
SetConsoleOutputCP(1251);
int choice;
do
{
cout << "\n1. Добавяне" << endl;
cout << "2. Изтриване на отрицателните елементи" << endl;
cout << "3. Изход" << endl;
cin >> choice;
switch (choice)
{
case 1:
add();
list();
break;
case 2:
del();
list();
break;
}
} while (choice != 3);
}