👤

De compus programul de creare a unei liste circulare cu cel puțin doua elemente de tip CHAR, apoi de eliminat din aceasta lista toate elementele ce au "vecini" egali(primul si ultimul element de considerat vecine).

Răspuns :

Program C++

#include <iostream>

using namespace std;

struct nod

{

   char info;

   nod* next=NULL, * back=NULL;

};

nod* construieste_nod(nod* anterior) {

   nod* curent = new nod;

   curent->back = anterior;

   anterior->next = curent;

   cout << "\nValoare nod : ";

   cin >> curent->info;

   return curent;

}

nod* sterge_nod(nod* nod_de_sters) {

   (nod_de_sters->back)->next = nod_de_sters->next;

   (nod_de_sters->next)->back = nod_de_sters->back;

   nod* temp = nod_de_sters->next;

   delete nod_de_sters;

   return temp;

}

bool se_sterge(nod* curent) {

   if ((curent->back)->info == (curent->next)->info) return 1;

   return 0;

}

void sterge_noduri_vecini_egali(nod* start) {

   while (se_sterge(start))

       start = sterge_nod(start);

   nod* curent=start->next;

   while (curent != start) {

       if (se_sterge(curent))

           curent = sterge_nod(curent);

       else curent = curent->next;

   }

}

void afisare_lista(nod* start) {

   nod* curent = start;

   cout << curent->info << " ";

   curent = curent->next;

   while (curent != start) {

       cout << curent->info << " ";

       curent = curent->next;

   }

}

int main() {

   nod* start=new nod;

   int nr_noduri;

   //Citire si construire noduri

   cout << "Nr noduri : ", cin >> nr_noduri;

   cout << "Valoare nod :", cin >> start->info;

   nod* curent=start;

   while (--nr_noduri) {

       curent=construieste_nod(curent);

   }

   curent->next = start;

   start->back = curent;

   sterge_noduri_vecini_egali(start);

   afisare_lista(start);

}

Vezi imaginea Andrei750238