Kā izveidot bināro koku programmā C

click fraud protection

Strukturējiet savu bināro koku. Katram binārajam kokam būs nepieciešama struktūra, pat ja tam ir tikai viens mainīgais. Izvēlieties nosaukumu, pēc tam izmantojiet typedef, lai to izveidotu: typedef struct student_data STUDENT_DATA;

Definējiet struktūru. Iekļaujiet divus norādes uz vienu un to pašu struktūru: struct student_data { int studenta_ID; int students_grade; STUDENT_DATI pa kreisi, taisnība;};

Piešķiriet šai datu struktūrai rādītāju, inicializējot to uz NULL, lai tā būtu koka galva: STUDENT_DATA *students = NULL;

Piešķiriet datu struktūrai divus pagaidu rādītājus: STUDENT_DATA jauns_students, cur_student;

Izmantojiet malloc(), lai izveidotu jaunu elementu, vienmēr pārbaudot kļūdu: if ((new_student = malloc (sizeof (STUDENT_DATA))) == NULL) { abort(); }

Aizpildiet jaunā elementa laukus. Iestatiet tā kreiso un labo lauku uz NULL: jauns_students->studenta_ID = jaunsID; jauns_students->studenta_izmērs = jaunums; jauns_students->pa kreisi = NULL; jauns_students->pa labi = NULL;

Apsveriet galvas mainīgo. Ja galvas mainīgais ir NULL, šis ir pirmais elements, kas pievienots kokam, tāpēc iestatiet galvas mainīgo, lai tas norādītu uz to, un esat pabeidzis: if (!students) { students = new_students; atgriešanās; }

Apstrādājiet ieraksta dublikātu, ja jaunā vērtība un pašreizējā vērtība ir vienādas: if (newID == cur_student->studenta_ID) { abort(); }

Tikt galā ar nevienlīdzīgām vērtībām. Ja jaunā vērtība ir mazāka par pašreizējo vērtību, jaunais elements iet pa kreisi. Pievienojiet to nekavējoties, ja kreisajā pusē nekā nav. Pretējā gadījumā šķērsojiet pa kreisi un veiciet cilpu: if (newID < cur_student->studenta_ID) { if (cur_students->left == NULL) { cur_students->left = newstuddent; atgriešanās 1; } cur_student = cur_student->pa kreisi;

Dariet to pašu labajā pusē, pretējā gadījumā: } else { if (cur_students->right == NULL) { cur_student->right = newstuddent; atgriešanās 1; } cur_students = cur_students->right; }}

Izveidojiet pagaidu mainīgo, kas norāda uz datu struktūru: STUDENT_DATA *cur_student;

Pārlūkojiet elementus, pārbaudot vajadzīgo vērtību: while (cur_student) { if (cur_student->studenta_ID == 15) { return cur_student->studenta_grade; }

Atzarojums pa kreisi vai pa labi un cilpa, ja tas nav atrasts: if (cur_students->studenta_ID < 15) { cur_student = cur_student->right; } else { cur_student = cur_student-> left; }

Skatiet, vai cilpa beidzas. Ja tā ir, tas nozīmē, ka jūs nekad neesat atradis preci: }return 0;

Kad programma beidzas, atdaliet bināro koku, jo ne visas operētājsistēmas to apstrādās automātiski. To vislabāk var izdarīt, izmantojot rekursīvu funkciju: void deallocate_binary_tree (STUDENT_DATA *tree) {

Atdalīt kreiso un labo apakškoku rekursīvi: deallocate_binary_tree (tree->left); deallocate_binary_tree (koks->pa labi);

Bināro koku meklēšanu un pievienošanu var veikt arī, izmantojot rekursiju. To būs daudz vieglāk uzrakstīt un uzturēt, bet nedaudz grūtāk saprast, līdz pieradīsit. Parasti tiek izveidots binārs koks, kurā ir tikai norādes uz otru C datu struktūru, bieži vien masīvu vai saistīto sarakstu, kurā atrodas faktiskie dati. Katrs binārais koks ir indekss, lai ātri meklētu vienā saraksta datu laukā.

Dzēšana no binārā koka ir ļoti sarežģīts C algoritms, taču daudzos bināro koku lietojumos elementi nekad netiek dzēsti.