Stive

Implementare cu vectori - alocare statica
Simulare stive alocate static

Implementare cu liste - alocare dinamica
Simulare stive alocate dinamic

Cozi

Implementare cu vectori - alocare statica
Simulare cozi alocate static

Implementare cu liste - alocare dinamica
Simulare cozi alocate dinamic

Liste alocate dinamic simplu inlantuite

1. Se citesc numere pana la 0 (0 nu face parte din sir). Sa se creeze o lista simplu inlantuita, alocata dinamic cu numerele citite, prin adaugare in cap.
Program in C++
#include <iostream>
using namespace std;
 
struct nod
{
    int info;
    nod *urm;
};
nod *prim=NULL;
 
void add_cap(nod * &prim, int x)
{
    nod * nou;
    nou=new nod;
    nou->info=x;
    nou->urm=prim;
    prim=nou;
}
 
void listare(nod *p)
{
    while (p!=NULL)
    {
        cout<<p->info<<" ";
        p=p->urm;
    }
    cout<<endl;
}
 
int main() {
    int x;
    cin>>x;
    while(x!=0)
    {
        add_cap(prim,x);
        cin>>x;
    }
    listare(prim);
    return 0;
}
 
2. Crearea unei LSI gata sortate: Se citesc numere din fisierul de intrare si se adauga in lista, astfel incat aceasta sa ramana sortata.
Program C++
#include <iostream>
 
using namespace std;
 
struct nod
{
    int info;
    nod *next;
};
nod *p=NULL,*u=NULL;
void addcoada(int x)
{
    nod *aux;
    aux=new nod;
    aux->info=x;
    aux->next=NULL;
    if(p==NULL && u==NULL)
    {
        p=aux;
        u=aux;
    }
    else
    {
        u->next=aux;
        u=aux;
    }
}
void addcap(int x)
{
    nod *aux;
    aux=new nod;
    aux->info=x;
    if(p==NULL && u==NULL)
    {
        aux->next=NULL;
        p=aux;
        u=aux;
    }
    else
    {
        aux->next=p;
        p=aux;
    }
}
void inseraredupa(int x)
{
    nod *aux, *q;
    q=p;
    aux=new nod;
    aux->info=x;
    if(q->info>x && q->next->info<x)
    {
        //adaug dupa primul element
        aux->next=q->next;
        q->next=aux;
    }
    else //trebuie sa caut locul si apoi sa inserez
    {
        while(q->next->info < x)
        {
            q=q->next;
        }
        aux->next=q->next;
        q->next=aux;
    }
}
void scriere()
{
    nod *q=p;
    while(q!=NULL)
    {
        cout<<q->info<<" ";
        q=q->next;
    }
}
int main()
{
    int n, x, i;
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>x;
        if(i==1) addcoada(x);
        else
            if(x<p->info) addcap(x);
            else
                if(x>u->info) addcoada(x);
                else
                    inseraredupa(x);
    }
    scriere();
    return 0;
}
 



.