Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct Nod {
- int val;
- Nod *next = NULL;
- };
- struct Lista {
- Nod *prim = NULL, *ult = NULL, *p = NULL;
- /// int lg = 0;
- void AdaugareInceput(int x) {
- /// if(lg == 0) {
- if(prim == NULL) {
- prim = new Nod;
- prim->val = x;
- prim->next = NULL;
- ult = prim;
- }
- else {
- p = new Nod;
- p->val = x;
- p->next = prim;
- prim = p;
- }
- /// lg++;
- }
- void AdaugareSfarsit(int x) {
- /// if(lg == 0) {
- if(ult == NULL) {
- ult = new Nod;
- ult->val = x;
- ult->next = NULL;
- prim = ult;
- }
- else {
- p = new Nod;
- p->val = x;
- p->next = NULL;
- ult->next = p;
- ult = p;
- }
- /// lg++;
- }
- void Afisare() {
- cout << "\n";
- p = prim;
- while(p != NULL) {
- cout << p->val << " ";
- p = p->next;
- }
- cout << "\n";
- }
- int CautareDupaValoare(int v) {
- int poz = 1;
- p = prim;
- while(p != NULL) {
- if(p->val == v) return poz;
- p = p->next;
- poz++;
- }
- return -1;
- }
- int CautareDupaPozitie(int poz) {
- if(poz < 1) return -1;
- int poz2 = 1;
- p = prim;
- while(p != NULL) {
- if(poz == poz2) return p->val;
- p = p->next;
- poz2++;
- }
- return -1;
- }
- void AdaugareDupaValoare(int v, int x) {
- p = prim;
- while(p != NULL) {
- if(p->val == v) {
- Nod *aux = new Nod;
- aux->val = x;
- aux->next = p->next;
- p->next = aux;
- if(p == ult) ult = aux;
- return;
- }
- p = p->next;
- }
- }
- void AdaugareDupaPozitie(int poz, int x) {
- if(poz < 1) return;
- int poz2 = 1;
- p = prim;
- while(p != NULL) {
- if(poz == poz2) {
- Nod *aux = new Nod;
- aux->val = x;
- aux->next = p->next;
- p->next = aux;
- if(p == ult) ult = aux;
- return;
- }
- p = p->next;
- poz2++;
- }
- }
- void StergereDupaValoare(int v) {
- Nod *prev;
- p = prev = prim;
- while(p != NULL) {
- if(p->val == v) {
- if(p == prim && p == ult) {
- prim = ult = p->next; /// NULL
- delete p;
- return;
- }
- if(p == prim) {
- prim = p->next;
- delete p;
- return;
- }
- if(p == ult) {
- ult = prev;
- delete p;
- return;
- }
- prev->next = p->next;
- delete p;
- }
- prev = p;
- p = p->next;
- }
- }
- void StergereDupaPozitie(int poz) {
- if(poz < 1) return;
- Nod *prev;
- int poz2 = 1;
- p = prev = prim;
- while(p != NULL) {
- if(poz == poz2) {
- if(p == prim && p == ult) {
- prim = ult = p->next; /// NULL
- delete p;
- return;
- }
- if(p == prim) {
- prim = p->next;
- delete p;
- return;
- }
- if(p == ult) {
- ult = prev;
- ult->next = NULL;
- delete p;
- return;
- }
- prev->next = p->next;
- delete p;
- }
- poz2++;
- prev = p;
- p = p->next;
- }
- }
- };
- int main() {
- Lista L;
- int rasp = 1, v, p, x;
- while(rasp) {
- cout << "1) Adauga un element la inceputul listei.\n";
- cout << "2) Adauga un element la finalul listei.\n";
- cout << "3) Afiseaza lista.\n";
- cout << "4) Cauta un element dupa o valoare.\n";
- cout << "5) Cauta un element dupa o pozitie.\n";
- cout << "6) Insereaza un element dupa o valoare.\n";
- cout << "7) Insereaza un element dupa o pozitie.\n";
- cout << "8) Sterge un element dupa o valoare.\n";
- cout << "9) Sterge un element dupa o pozitie.\n";
- cout << "0) Iesire\n";
- cout << "\n";
- cout << "Raspuns: "; cin >> rasp;
- switch(rasp) {
- case 1:
- cout << "Element: "; cin >> x;
- L.AdaugareInceput(x);
- break;
- case 2:
- cout << "Element: "; cin >> x;
- L.AdaugareSfarsit(x);
- break;
- case 3:
- cout << "Elementele: ";
- L.Afisare();
- break;
- case 4:
- cout << "Valoare: "; cin >> v;
- cout << "Pozitia " << L.CautareDupaValoare(v) << "\n";
- break;
- case 5:
- cout << "Pozitie: "; cin >> p;
- cout << "Valoarea " << L.CautareDupaPozitie(p) << "\n";
- break;
- case 6:
- cout << "Valoare: "; cin >> v;
- cout << "Element: "; cin >> x;
- L.AdaugareDupaValoare(v, x);
- break;
- case 7:
- cout << "Pozitie: "; cin >> p;
- cout << "Element: "; cin >> x;
- L.AdaugareDupaPozitie(p, x);
- break;
- case 8:
- cout << "Valoare: "; cin >> v;
- L.StergereDupaValoare(v);
- break;
- case 9:
- cout << "Pozitie: "; cin >> p;
- L.StergereDupaPozitie(p);
- break;
- default:
- break;
- }
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement