Informatică, întrebare adresată de george91florin, 8 ani în urmă

Scrieti un program pentru determinarea principalelor operaţii pe o listă înlănţuită ce conţine numere întregi. Se vor dezvolta următoarele operaţii:
- generarea unei liste
- lungimea dintr-o lista
- adaugarea unui element intr-o lista: la inceputul listei, sau dupa un element dat
- modificarea valorii unui anumit element al listei
- stergerea unui element din lista
- stergerea primului element
- stergerea ultimului element
- stergerea unui anumit element
- afisarea listei
- distrugerea listei.

Răspunsuri la întrebare

Răspuns de andrei750238
1

#include <iostream>

#include <vector>

#include <fstream>

#include <algorithm>

template <class T>

class Node {

public:

T data;

Node<T>* ante, * urm;

Node<T>() {

 ante = nullptr;

 urm = nullptr;

}

};

template <class T>

class Lista {

private:

Node<T>* start, * end;

int dim;

public:

Lista() {

 start = nullptr;

 end = nullptr;

 dim = 0;

}

unsigned size() {

 return dim;

}

bool empty() {

 return dim == 0;

}

void push_front(int key) {

 Node<T>* nod_nou = new Node<T>;

 nod_nou->data = key;

 nod_nou->urm = start;

 start = nod_nou;

 if (empty()) {

  end = nod_nou;

 }

 dim++;

}

void push_back(int key) {

 if (empty()) {

  push_front(key);

  return;

 }

 Node<T>* nod_nou = new Node<T>;

 nod_nou->data = key;

 nod_nou->ante = end;

 end->urm = nod_nou;

 end = nod_nou;

 dim++;

}

void pop_front() {

 erase(start);

}

void pop_back() {

 erase(end);

}

Node<T>* find(int key, Node<T>* start_cautare = nullptr) {

 if (empty()) return nullptr;

 Node<T>* curent = start;

 if (start_cautare == nullptr)

  curent = start;

 while (curent != nullptr) {

  if (curent->data == key)

   return curent;

  curent = curent->urm;

 }

 return nullptr;

}

void erase(Node<T>* nod) {

 if (nod == nullptr)return;

 Node<T>* a, * b;

 a = nod->ante;

 b = nod->urm;

 if (a != nullptr) a->urm = b;

 else start = b;

 if (b != nullptr) b->ante = a;

 else end = a;

 delete nod;

 dim--;

}

void remove(int key) {

 Node<T>* adresa = find(key);

 while (adresa != nullptr) {

  erase(adresa);

  Node<T>* adresa_urmatoare = adresa->urm;

  adresa = find(key, adresa_urmatoare);

 }

}

void insert(Node<T>* nod, int val) {

 Node<T>* a = nod->ante;

 Node<T>* nou = new Node<int>;

 nou->data = val;

 nou->urm = nod;

 nod->ante = nou;

 if (a != nullptr) {

  a->urm = nou;

  nou->ante = a;

  a->urm = nou;

 }

 dim++;

}

void clear() {

 while (!empty()) erase(start);

}

void print() {

 Node<T>* curent = start;

 while (curent != nullptr) {

  std::cout << curent->data << " ";

  curent = curent->urm;

 }

}

~Lista() {

 clear();

}

};

int main() {

Lista<int> a;

int alegere = 0;

do {

 std::cout << "\n\nMENIU :";

 std::cout << "\n1 . Adaugare element la capul listei";

 std::cout << "\n2 . Adaugare element la coada listei";

 std::cout << "\n3 . Sterge primul element din lista";

 std::cout << "\n4 . Sterge ultimul element din lista";

 std::cout << "\n5 . Cauta element";

 std::cout << "\n6 . Sterge element (adresa)";

 std::cout << "\n7 . Sterge element (valoare)";

 std::cout << "\n8 . Inserare element";

 std::cout << "\n9 . Verifica daca lista e goala";

 std::cout << "\n10. Numar elemente din lista";

 std::cout << "\n11. Afisare continut lista";

 std::cout << "\n12. Goleste lista";

 std::cout << "\n0 . Oprire program";

 std::cout << "\nAlegeti optiunea : ";

 std::cin >> alegere;

 int val;

 void* adr;

 switch (alegere)

 {

 case 1:

  std::cout << "Valoare :";

  std::cin >> val;

  a.push_front(val);

  break;

 case 2:

  std::cout << "Valoare :";

  std::cin >> val;

  a.push_back(val);

  break;

 case 3:

  a.pop_front();

  break;

 case 4:

  a.pop_back();

  break;

 case 5:

  std::cout << "Valoare :";

  std::cin >> val;

  std::cout << "Element gasit pe pozitia : " << a.find(val);

  break;

 case 6:

  std::cout << "Adresa de sters :";

  std::cin >> adr;

  a.erase((Node<int>*) adr);

  break;

 case 7:

  std::cout << "Valoare :";

  std::cin >> val;

  a.remove(val);

  break;

 case 8:

  std::cout << "Valoare :";

  std::cin >> val;

  std::cout << "Adresa :";

  std::cin >> adr;

  a.insert((Node<int>*)adr, val);

  break;

 case 9:

  std::cout << "Lista " << (a.empty() ? "" : "este") << " este goala";

  break;

 case 10:

  std::cout << "In lista exista " << a.size() << " elemente";

  break;

 case 11:

  std::cout << "Continut lista : ";

  a.print();

  break;

 case 12:

  a.clear();

  break;

 case 0:

  std::cout << "Ati ales sa parasiti programul";

  break;

 default:

  std::cout << "Alegere invalida";

  break;

 }

} while (alegere);

}

► Nota:

Programul dat contine ceva mai multe functii si e template, sper sa nu fie asta o problema

Alte întrebări interesante