Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- using namespace std;
- struct Nod
- {
- int info;
- Nod *leg;
- };
- struct Lista /// Simplu inlantuita
- {
- Nod *L;
- void Inserare1(int x) /// Inserare la inceput
- {
- Nod *p;
- p = new Nod;
- p -> info = x;
- p -> leg = L;
- L = p;
- }
- void Inserare2(Nod *p, int x) /// Inserare dupa nodul de adresa memorata in p
- {
- Nod *q;
- q = new Nod;
- q -> info = x;
- q -> leg = p -> leg;
- p -> leg = q;
- }
- /// Insereaza dupa al k-lea nod
- /// un nou nod cu informatia x;
- /// Daca lista are mai putin de
- /// k noduri, inserarea se face
- /// la sfarsitul listei.
- void Inserare3(int k, int x)
- {
- Nod *p, *q;
- for(p = L; (k > 1) && (p != NULL); p = p -> leg)
- {
- k--;
- q = p;
- }
- if(p == NULL) /// Inserez dupa q
- Inserare2(q, x);
- else /// Inserez dupa p
- Inserare2(p, x);
- }
- void Parcurgere() /// Parcurgerea listei
- {
- for(Nod *p = L; p != NULL; p = p -> leg)
- cout << p -> info << " ";
- cout << "\n";
- }
- void Init() /// Initializarea listei vide
- {
- L = NULL;
- }
- void Sterge1() /// Stergerea primului nod
- {
- if(L = NULL) return;
- Nod *p;
- p = L;
- L = p -> leg;
- delete p;
- }
- void Sterge2(Nod *p) /// Stergerea nodului dupa nodul de adresa memorata p
- {
- Nod *q;
- q = p -> leg;
- p -> leg = q -> leg;
- delete q;
- }
- Nod *Cautare(int x) /// Cautarea valorii x in lista si returnarea pointer-ului
- {
- Nod *p;
- for(p = L; p != NULL; p = p -> leg)
- if(p -> info == x)
- return p;
- return NULL;
- }
- void ParcDS(Nod *p) /// Parcurgerea de la dreapta la stanga a nodurilor listei
- {
- if(p != NULL)
- {
- ParcDS(p -> leg);
- cout << p -> info << " ";
- }
- }
- };
- void InserNr(Lista a)
- {
- for(Nod *p = a.L; p != NULL; p = p -> leg)
- if(p -> info % 2 == 0)
- a.Inserare2(p, p -> info + 1);
- }
- void Elim5(Lista a)
- {
- while(a.L != NULL && a.L -> info % 5 == 0) a.Sterge1();
- for(Nod *p = a.L; p -> leg != NULL; )
- if(p -> leg -> info % 5 == 0)
- a.Sterge2(p);
- else
- p = p -> leg;
- }
- void AfisCheie(Lista a, int k)
- {
- Nod *p = a.L;
- for(p = a.L; k > 1 && p != NULL; p = p -> leg)
- k--;
- if(p == NULL) cout << "Nu se este."
- cout << p -> info;
- }
- void AfisCheieDS(Lista a, int k)
- {
- Nod *q , *p;
- q = p = a.L;
- for(int i = 1; i <= k; i++)
- p = p -> leg;
- while(p != NULL)
- {
- q = q -> leg;
- p = p -> leg;
- }
- cout << q -> info;
- }
- int main()
- {
- Lista a;
- a.Init();
- srand(time(0));
- for(int i = 1; i <= 10; i++)
- a.Inserare1(rand() % 100 + 1);
- a.Parcurgere();
- /* -1-
- InserNr(a);
- a.Parcurgere();
- */
- /*
- Elim5(a);
- a.Parcurgere();
- */
- /// Sa se afiseze cheiea celui de-al k-lea nod
- /// Daca lista are mai putin de k noduri, se va afisa un mesaj
- //AfisCheie(a, 3);
- /// De la DR la ST
- AfisCheieDS(a, 3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement