Page 1 of 1

Въпрос за функция в C++

Posted: Tue Apr 28, 2015 10:02 am
by respec7_m3
Здравейте, бих искал някой да ми обясни какво точно прави функцията del на съответните редове, където има коментари на английски, благодаря! (Може с нови по-описателни коментари на местата на сегашните)

Code: Select all

// 2.4.44

#include <iostream>
#include <Windows.h>
using namespace std;
struct elem 
&#123;
	int key;
	elem *next;
	elem *prev;
&#125;*start = NULL;

void list&#40;&#41; 
&#123;
	SetConsoleOutputCP&#40;1251&#41;;
	elem *p = start;
	if &#40;start&#41; 
	&#123;
		cout << "Списъкът е&#58; ";
		while &#40;p&#41; 
		&#123;
			cout << p->key << "  ";
			p = p->next;
		&#125;
	&#125;	else		cout << "Празен списък";
&#125;
void add&#40;&#41; 
&#123;
	SetConsoleOutputCP&#40;1251&#41;;
	int n;
	cout << "Въведете n&#58; ";
	cin >> n;
	elem *p = start;
	if &#40;start&#41; // Правим проверка дали има нещо в списъка
	&#123;
		while &#40;p->next&#41; // Ако има нещо, се изпълняват следващите редове
		&#123;
			p = p->next;
		&#125;
		elem* q = new elem;
		q->key = n;
		q->next = NULL;
		q->prev = p;
		p->next = q;
	&#125; else // Ако не се изпълнява else, връщаме се на "Празен списък" и трябва да добавим число
	&#123;
		start = new elem;
		start->next = NULL;
		start->prev = NULL;
		start->key = n;
	&#125;
&#125;
int del&#40;int k = 0&#41; // Функция за изтриване на отрицателно число
&#123;
	elem* temp;
	elem* p = start;
	while &#40;p&#41; 
	&#123;
		if &#40;p->key>k&#41;			p = p->next;
		else 
		&#123;			//Fix next node's prev pointer to new prev
			if &#40;p->next&#41; &#123;
				p->next->prev = p->prev;
			&#125;			//Fix prev node's next pointer to new next
			if &#40;p->prev&#41; &#123;
				p->prev->next = p->next;
			&#125;
			temp = p;
			p = p->next;			//Save the start pointer, or we might leak later or get in trouble.
			if &#40;temp == start&#41; &#123;
				start = start->next;
			&#125;			//Release all pointers of this node.
			temp->next = NULL;
			temp->prev = NULL;
			delete temp;
		&#125;
	&#125;
	return 0;
&#125;
int main&#40;&#41; 
&#123;
	SetConsoleOutputCP&#40;1251&#41;;
	int choice;
	do 
	&#123;
		cout << "\n1. Добавяне" << endl;
		cout << "2. Изтриване на отрицателните елементи" << endl;
		cout << "3. Изход" << endl;
		cin >> choice;
		switch &#40;choice&#41; 
		&#123;
			case 1&#58;
				add&#40;&#41;;
				list&#40;&#41;;
				break;
			case 2&#58;
				del&#40;&#41;;
				list&#40;&#41;;
				break;
		&#125;
	&#125; while &#40;choice != 3&#41;;
&#125;