DATA STRUCTURES test nr. 3


  1. Pentru construirea unei structuri de tip graf:
    a) se aloca un masiv bidiemnsional int a[20][20] si un vector definit prin char nume[20] pentru a memora numele nodurilor
    b) se utilizeaza o lista limpla utilizata pentru memorarea matricelor rare in care informatia utila este dedicata nodurilor ce definesc arcele;
    lista are atatea elemente cate arce are graful
    c) se foloseste un vector de pointeri spre structura cu atatea componente cate noduri are grafulsi mai multe liste simple
    d) se construieste o lista de liste
    e) se foloseste o lista simpla unde informatia utila a fiecarui element contine definiri ale nodurilor si un pointer spre primul element al unei liste simple ce contine elemente de identificare a arcelor incidente spre exterior

  2. Daca s-a efectuat definirea:
    int a[10];
    a)referirea unui element oarecarese realizeaza cu expresia a[i]
    b)referirea unui element oarecare se realizeaza cu expresia *(a+i)
    c) referirea elementului de pe linia j si coloana j se realizeaza cu expresia *(a+i)
    d) referirea unui element oarecare se realizeaza cu expresia *a
    e) referirea unui element oarecare se realizeaza cu expresia &a

  3. Prin secventa:
    struct LISTA_DUBLA {
    int info;
    struct LISTA_SIMPLA *p_urmator,*p_precedent;
    }
    a) s-a definit un tip de date de tip articol
    b) s-a definit tipul articol autoreferit prin doi pointeri
    c) sunt create conditii pentru a defini variabilele:
    struct LISTA_DUBLA var1, var2, var3, var4, p_caplista;
    d) sunt create conditii pentru a defini variabilele simple:
    struct LISTA_DUBLA var1, var2, var3, var4, *p_caplista;
    e) sunt create conditii pentru a defini variabilele elementare:
    struct LISTA_DUBLA var1, var2, var3, var4, **p_caplista;

  4. Inserarea unui element A pe pozitia K a unui masiv unidimensional
    cu N componente initializate, N < 15,K int x[20];
    se realizeaza prin secventa:
    a) for(i=N-1; i>K;i--)
    x[N-i+1]=x[N-i];
    x[i]=A;
    b) for(i=N; i>K-1;)
    x[N-i-- +1]=x[N-i];
    x[++i]=A

    c) for(i=N; i>K-1;i++)
    x[N-i+1]=x[N-i];
    x[i]=A

    d) for(i=0; i>K-1;i++)
    x[N-i+1]=x[N-i];
    x[i]=A

    e) for(i=N-1; i>K;i--)
    x[i+1]=x[i];
    x[i]=A

  5. Lista simpla este:
    a) o structura de date dinamica;
    b) o insiruire aleatoare de articole
    c) variabile pointer care asigura referire din aproape in aproape
    d) parametru in procedura de concatenare
    e) o structura de date initializata cu NULL

  6. Daca arborele binar are o radacina R un descendent stang A si un descendent drept B; nodul A are un descendent stang C si un descendent drept D; nodul B are un descendent stang E si un descendent drept F; nodul D are un descendent stang X si un descendent drept Y; nodul F are un descendent stang W si un descendent drept V, atunci:
    a) traversarea in preordine sau inseamna referirea nodurilor
    R A C D X Y B E F W V
    b) traversarea in preordine sau inseamna referirea nodurilor
    R B C D X Y A F E W V
    c) traversarea in preordine sau inseamna referirea nodurilor
    R A C E X Y B E D W V
    d) traversarea in preordine sau inseamna referirea nodurilor
    R A C D B E R Y X W V
    e) traversarea in preordine sau inseamna referirea nodurilor
    R B A D X Y C E R W V


  7. In loc sa se lucreze cu trei masive unidimensionale se va lucra mai bine cu un masiv bidimensional cu tre coloane daca:
    a) cele trei masive au acelasi numar de componente
    b) cele trei masive au elemente de acelasi tip
    c) se efectueaza aceleasi calcule cu cele trei masive
    d) se urmareste ca programul sa aiba un numar cat mai restrans de instructiuni
    e) in viitor se va lucra cu un numar si mai mare de masive unidimensionale

  8. Pentru a insuma elementele a patru masive unidimensionale se scrie programul care:
    a) -defineste trei masive unidimensionale
    - initializeaza cele patru masive din trei fisiere
    - in patru structuri repetitive se insumeaza elementele celor patru masive
    - se afisaza rezultatele
    b) se initializeaza variabila n a numarului de elemente
    - se initializeaza de la tastatura, rand pe rand cele trei masive unidimensionale
    intr-o structura repetitiva, fara a utiliza definirea unui bloc, se insumeaza elementele celor trei masive
    se afisaza rezultatele
    c) apeleaza proceduri din biblioteca suprasaturata de lucru cu masive unidimensionale
    int iutil;
    d) in care se initializeaza cu zero tot ce se poate initializa pentru siguranta {
    e) utilizeaza instructiunea while() pentru a vedea daca s-au terminat de traversat elementele listelor care stocheaza cele trei masive unidimensionale

  9. Daca tipul asociat unui arbore binar este definit prin:
    struct arbin{
    int info; // informatia utila
    struct arbin *pst; // pointer spre descendent stang
    struct arbin *pdr; // pointer spre descendent drept
    }
    typedef struct arbin * PARBIN; // definire tip pointer spre arbin
    atunci procedura pentru stergerea arborelui este:
    a) void stergere (PARBIN pradacina)
    {
    if(pradacina)
    {
    stergere(pradacina->pst);
    stergere(pradacina->pdr);
    delete(pradacina);
    }
    }
    b) void stergere_preordine (PARBIN pradacina)
    {
    if(pradacina!=NULL)
    {
    stergere(pradacina->pst);
    stergere(pradacina->pdr);
    delete(pradacina);
    }
    }

    c) void stergere_inordine (PARBIN pradacina)
    {
    if(pradacina)
    {
    stergere(pradacina->pst);
    delete(pradacina);
    stergere(pradacina->pdr);
    }
    }
    d) delete_all(pradacina);
    {
    while(pradacina)delete(radacina);
    delete_all(radacina->pst);
    delete_all(radacina->pdr);
    }
    e) void stergere (PARBIN pradacina)
    {
    if(pradacina)
    {
    delete(pradacina);
    stergere(pradacina->pst);
    stergere(pradacina->pdr);
    }
    }
  10. Compararea a doua liste duble inseamna:
    a) comparea continutului informatiei utile din cele doua liste duble
    b) comparea lungimilor ca numar de elemente din cele doua liste duble
    c) traversarea structurilor de la primul spre ultimul element
    d) apelarea procedurii:
    int comparare_LD_stangadreapta(struct lista_dubla *pcpld1, struct lista_dubla *pcpld2)
    {
    struct lista_dubla *paux1, *paux2;
    int vb=1, lungime_list1, lungime_list2;
    paux1=cpld1;
    paux2=cpld2;
    lungime_list1=sizeof_lista_simpla(paux1);
    lungime_list2=sizeof_lista_simpla(paux2);
    if(lungime_list1!=lungime_list2) return (vb=0);
    while(paux1 && paux2){
    if(paux1->info != paux2->info) return (vb=0);
    paux1=paux1->p_urmator;
    paux2=paux2->p_urmator;
    }
    return (vb); }

    unde sizeof_lista_dubla() este o functie care intoarce numarul de elemente din lista simpla
    e) apelarea unei proceduri care are doi parametri, cei doi pinteri ce refera, respectiv, primul element fiecarei liste duble; procedura returneaza o variabila booleana

  11. Secventa:
    ...................
    s+=a[n[i]][m[j]];
    {
    a) este incorecta pentru ca expresia indiciala contine numai variabile elementare
    b) permite insumarea numai anumitor elemente din masiv
    c) permite insumarea tuturor elementelor matricei
    d) necesita testarea elementelor n[i] si m[j] pentru a vedea daca sunt intregi
    e) trebuie sa fie precedata de atribuirile
    i=n[i];
    j=m[j];


  12. Instructiunea typedef struct dlista * LISTA_DUBLA;
    a) trebuie sa fie precedata de secventa:

    structu dlista {
    int informatie_utila;
    struct dlista * p_precedent, *p_urmator;
    }

    b) este utilizata pentru a defini pointerul cu care se refera primul element al listei duble prin:
    LISTA_DUBLA * p_cap_lista_dubla;
    c) se utilizeaza pentru a aloca zona de memorie:
    LISTA_DUBLA pointer_ld;
    .................
    pointer_ld=(LISTA_DUBLA)malloc(sizeof(d_lista));
    d) se utilizeaza pentru a aloca zona de memorie:
    LISTA_DUBLA pointer_ld;
    .................
    pointer_ld=(LISTA_DUBLA)malloc(sizeof(LISTA_DUBLA));
    e) se utilizeaza pentru a aloca zona de memorie:
    LISTA_DUBLA pointer_ld;
    .................
    pointer_ld=(dlista)malloc(sizeof(dlista));


  13. Secventa destinata alocarii zonei de memorie corespunzatoare unui element al listei duble este: a) o functie de forma:
    struct dlist *creare_element()
    {
    struct dlist *p_capdlist;
    p_capdlist=(struct dlist *)malloc (sizeof(struct dlist));
    return(p_capdlist);
    }
    b) presupune alocare si dealocare de zone de memorie
    c) este obligatoriu sa contina initializarea cu NULL a pointerilor definiti in dlist
    d) inclusa in toate procedurile de stregere a listelor duble
    e) este o functie care are doi parametri: pointerul spre zona de memorie ce trebuie alocata si informatia utila

  14. Pentru dealocarea zonei de memorie corespunzatoare unui element dintr-o lista dubla:
    a) se initializeaza cu NULL cei doi pointeri ai elementului
    b) este suficienta numai distrugerea legaturilor cu celelalte elemente ale listei
    c) se foloseste functia
    void sterge_element (struct dlist * p_caplistadubla){
    free(p_caplistadubla);
    }
    d) se foloseste functia
    void sterge_element (struct dlist * p_caplistadubla){
    free(p_caplistadubla);
    return(p_caplistadubla); }
    e) se foloseste functia
    struct dlist * sterge_element (struct dlist * p_caplistadubla){
    free(p_caplistadubla);
    return (NULL);
    }

  15. Pentru testarea daca o lista simpla este vida se procedeaza astfel:
    a) se apeleaza functia:
    int verifica (p_capls)
    struct lista_simpla p_capls;
    {
    return((p_capls->p_urmator == NULL) ? 1: 0);
    }
    b) se apeleaza o functie care returneaza NULL
    c) se apeleaza o functie care numara elementele listei si transmite numarul elementelor gasite, lasand in seama programatorului sa verifice daca numarul gasit este NULL
    d) se testeaza de la stanga la dreapta pointerii spre urmatorul element
    e) se apeleaza functia:
    int verifica (p_capls)
    struct lista_simpla p_capls;
    {
    return((p_capls->p_urmator == NULL) ? 1: 1);
    }


  16. Traversarea unui arbore binar se efectueaza:
    a) in preordine;
    b) in preordine sau "standa-dreapta-radacina"
    c) de sus in jos de la radacina cu frunza din stanga
    d) de jos in sus de la frunza din dreapta spre radacina
    e) de la stanga la dreapta

  17. Pentru adaugarea unui element intr-o lista simpla se utilizeaza procedura:
    a) void adaugare_element(struct slista * p_ls, int valoare)
    {
    struct slista *p_temp;
    p_temp=(struct slista *) malloc (sizeof(struct slista));
    p_temp->informatia_utila=valoare;
    p_temp->urmator=NULL;
    p_ls->urmator=p_temp;
    }
    b) void adaugare_element(struct slista * p_ls, int valoare)
    {
    struct slista *p_temp;
    p_temp=(struct slista *) malloc (sizeof(struct slista));
    p_temp->informatia_utila=&valoare;
    p_temp->urmator=NULL;
    p_ls.urmator=p_temp;
    }
    c) void adaugare_element(struct slista * p_ls, int valoare)
    {
    struct slista *p_temp;
    p_temp=(struct slista *) malloc (sizeof(struct slista));
    p_temp->informatia_utila=valoare;
    p_temp.urmator=NULL;
    p_ls.urmator=p_temp;
    }
    d) void adaugare_element(struct slista * p_ls, int valoare)
    {
    struct slista *p_temp;
    p_temp=(struct slista *) malloc (sizeof(struct slista));
    p_temp->informatia_utila=valoare;
    p_temp->urmator=NULL;
    p_ls->urmator=p_temp->urmator;
    }
    e) void adaugare_element(struct slista * p_ls, int valoare)
    {
    struct slista *p_temp;
    p_temp=(struct slista *) malloc (sizeof(struct slista));
    p_temp.informatia_utila=valoare;
    p_temp.urmator=NULL;
    p_ls.urmator=p_temp;
    }


  18. Secventa de instructiuni:
    ....................
    for(i=0; i < nr[k]; i++)
    s[k]+=a[i][k];
    a) calculeaza sumele elementelor de pe coloanele unei matrice
    b) calculeaza sumele unor elemente de pe coloanele unor matrice
    c) calculeaza primele n[k] elemente de pe coloana k a matricei a[][]
    d)insumeaza un numar oarecare de elemente de pe coloanele matricei a[][]
    e) calculeaza suma primelor n[k] elemente ale coloanei k
    din matricea a[][] daca n[k]< NRLIN si kin programul unde s-au efectuat definirile:
    .............
    #define NRLIN 20
    #define NRCOL 10
    ..................
    int a[NRLIN][NRCOL];
    ................
  19. Interschimbul elementelor consecutive ale masivului bidimensional
    definit prin:
    int x[100[10];
    se realizeaza :
    a) direct intre cele doua elemente
    b) folosind doua variabile de lucru definite prin instructiunea
    int a,b;
    ...............
    a=x[i][0];
    b=x[i+1][0]:
    x[i][0]=b;
    x[i+1][0]=a;
    ...........

    c) folosind o singura variabila elementara, obligatoriu definita statica temp, prin secventa:
    temp=x[i][0];
    x[i+1][0]=x[i][0];
    x[i][0]=temp;

    d) folosind o singura variabila elementara, obligatoriu denumita temp definita prin
    int temp;
    utilizata prin secventa:
    temp=x[i][0];
    x[i][0]=x[0][i+1];
    x[0][i]=temp;

    e)folosind o singura variabila elementara, denumita temp, prin secventa:
    temp=x[i][0];
    x[i+1][0]=x[i][0];
    x[i][0]=temp;


  20. Variabila ptr definita prin:
    int ***ptr[];
    a) este o variabila elementara
    b) este un pointer multiplu
    c) este pointer care memoreaza adrea unei zone de memorie de tip intreg sau pointer spre intreg
    d) este un vector de pointeri spre pointeri spre pointeri spre int e) se refera prin expresia &&&ptr