DATA STRUCTURES test nr. 8


  1. Pentru definirea si initializarea la definire a structuri de tip graf corespunzatoare matricei:
    ...A B C D E F G
    .A.61 10 15 25 37 0 0
    .B. 0 0 0 0 20 0 0
    .C. 0 0 0 0 21 0 0
    .D. 0 0 0 0 31 40 0
    .E. 0 0 0 0 0 0 50
    .F. 0 0 0 0 0 0 28
    .G. 0 0 28 0 0 0 0
    se utilizeaza secventa:
    a) int a[7][7]={
    {61,10,15,25,37,0,0},
    {0,0,0,0,20,0,0},
    {0,0,0,0,21,0,0},
    {0,0,0,0,31,40,0},
    {0,0,0,0,0,0,50,0},
    {0,0,28,0,0,0,0},
    {}
    };
    char nod[7]={'A','B','C','D','E','F','G'}

    b) se utilizeaza o lista limpla utilizata pentru memorarea matricelor rare (nod sursa, nod destinatie, valoare)in care informatia utila este dedicata nodurilor ce definesc arcele;
    lista are atatea elemente cate arce are graful
    c) se foloseste un vector de 7 pointeri spre structura cu atatea componente cate noduri are graful si 7 liste simple
    d) se construieste o lista de liste cu 7*7 noduri
    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 se considera definirile:
    struct articol_1{
    int x[10];
    int y[5];
    };
    ................
    struct articol_2{
    int z[5];
    int w[10];
    };
    ..............
    atunci:
    a) secventa:
    for(i=0; i<10;i++){
    x[i]=i;
    w[i]=i*i;}
    initializeaza partial structurile
    b) secventa:
    struct articol_1 w;
    struct articol_2 x;
    ..............
    for(i=0; i<10;i++){
    w.x[i]=i;
    x.w[i]=i*i;}
    initializeaza partial structurile
    c) secventa:
    union redefinire {
    struct articol_1 T;
    struct articol_2 U;
    };
    ..................
    redefinire XYZW; ..............
    for(i=0; i<10;i++)
    XUZW.U.z[i]=i;
    for(i=0;i<5;i++)
    XYZW.U.w[i]=i*i;}
    initializeaza complet si variabila U
    d) secventa:
    union redefinire {
    struct articol_1 T;
    struct articol_2 U;
    };
    ..................
    redefinire XYZW; ..............
    for(i=0; i<10;i++)
    XUZW.U.z[i]=i;
    for(i=0;i<5;i++)
    XYZW.U.w[i]=i*i;}
    initializeaza complet si variabila T
    c) secventa:
    union redefinire {
    struct articol_1 T;
    struct articol_2 U;
    };
    ..................
    redefinire XYZW; ..............
    for(i=0; i<10;i++)
    XUZW.U.z[i]=i;
    for(i=0;i<5;i++)
    XYZW.U.w[i]=i*i;}
    initializeaza complet variabilele T si U

  3. Prin secventele:
    struct LISTA_DUBLA {
    int info;
    struct LISTA_DUBLA *p_urmator=NULL,*p_precedent=NULL;
    }
    ..................
    struct LISTA_SIMPLA
    var1={100},
    var2={200},
    var3={300},
    var4={400}, *p_caplista;
    a) s-a definit numai un tip de date de tip articol care se redefineste prin:
    typedef struct LISTA_SIMPLA_DUBLA lista_dubla_simpla;

    iar variabilele var1, var2, var3 si var4 sunt initializate incomplet
    b) s-a definit tipul articol autoreferit prin doi pointeri si au fost initializate incomplet variabilele var1,var2,var3,var4 la definire
    c) sunt create conditii pentru a defini variabilele:
    struct lista_simpla_DUBLA var1, var2, var3, var4, *p_caplista; daca in prealabil s-a efectuat definirea:
    typedef struct LISTA_SIMPLA lista_simpla_DUBLA;

    dupa care s-a incarcat o lista simpla cu 4 elemente
    d) sunt create conditii pentru a construi lista dubla prin expresiile de atribuire:
    p_caplista=&var1;
    var1.p_urmator=&var2;
    var2.p_urmator=&var3;
    var3.p_urmator=&var4;
    var4.p_urmator=NULL;
    var1.p_precedent=NULL;
    var2.p_precedent=&var1;
    var3.p_precedent=&var2;
    var4.p_precedent=&var3;

    e) sunt create conditii pentru a defini variabilele elementare:
    struct LISTA_DUBLA var1, var2, var3, var4, **p_caplista;
    dupa care prin expresiile de atribuire: p_caplista=&var1;
    var1.p_urmator=&var2;
    var2.p_urmator=&var3;
    var3.p_urmator=&var4;


  4. Daca este data definirea:
    unsigned int x[10];
    si se doreste scrierea unui program in care elementele sa fie
    insumate in variabila s definita prin:
    unsigned int s=0; , atunci:
    a) domeniul unui element x[i] este [-32768; 32767 ]
    b) domeniul unui element x[i] este [0; 65535]
    c) domeniul elementului x[i] este [0; 6553,5]
    d) domeniul elementului x[i] este identic cu domeniul elementului x[i]
    e) domeniul elementelor masivului este [0; 6553]

  5. Numararea elementelor nule dintr-un masiv unidimensional definiti prin
    int x[100];
    se realizeaza prin secventa:
    a) for(i=0;i if(x[i]==0)contor++;
    b) int i=0,contor=0;
    for(i=0;i if(x[i]=0)contor++;

    c) int i=0,
    for(i=0;int contor=0;i if(x[i]==0)contor++;

    d) int i=0,contor=0;
    for(inti=0;i if(x[i]==0)contor++;

    e) int contor=0;
    for(int i=0;i if(x[i]==0)contor++;


  6. Lista simpla se defineste prin

    a) struct dlista {
    int informatia_utila;
    struct dlista * p_precedent;
    }
    b) struct s_lista {
    int pointer;
    struct s_lista_ pointer;
    }
    c) struct lista_simpla{
    struct lista_simpla *p_precedent;
    double lista_simpla_;
    }
    d) struct slista{
    int a[10];
    struct slista x;
    struct slista *x;
    }
    e) struct listasimpla {
    struct lista_simpla * p_urmator;
    }

  7. Definirea variabilei pointer cu care se refera primul element al listei simple se realizeaza prin secventa:
    a) struct slista {
    int iutil;
    struct slista *purmator;
    } * p_slista;
    b) struct slista {
    int iutil;
    struct slista *purmator;
    } p_slista;
    c) struct slista {
    int iutil;
    struct slista *purmator;
    }x, * p_slista=x;
    d) struct slista {
    int iutil;
    struct slista *purmator;
    } *x, * p_slista=&x;
    e) struct slista {
    int iutil;
    struct slista *purmator;
    } * p_slista=&slista;

  8. Traversarea unui arbore binar se efectueaza:
    a) in preordine sau "radacina-stanga-dreapta";
    b) in preordine sau "radacina-dreapta-stanga"
    c) in preordine sau "stanga-dreapta -radacina"
    d) in preordine sau "dreapta-stanga-radacina"
    e) in preordine sau "drepta-radacina-stanga"

    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 adre 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 postordine sau "stanga-drapta-radacina" inseamna referirea nodurilor
    C X Y D A E W V F B R
    b) traversarea in postordine sau inseamna referirea nodurilor
    C X Y D A E W V B F R
    c) traversarea dupa regula "stanga-dreapta-radacina" inseamna referirea nodurilor
    C X Y D E A W R V F B

    d) traversarea in postordine inseamna referirea nodurilor
    D A R C B E X Y W V R

    e) traversarea dupa regula "stanga-dreapta-radacina" inseamna referirea nodurilor
    C X Y D E A W V F R B

    apelarea procedurii:
    int comparare_LD_dreaptastaqnga(struct lista_dubla *pcpld_ultim, struct lista_dubla *pcpld2_ultim, int lungime_list1, int lungime_list2)
    {
    struct lista_dubla *paux1, *paux2;
    int vb=1; paux1=cpld1_ultim;
    paux2=cpld2_ultim;
    if(lungime_list1!=lungime_list2) return (vb=0);
    while(paux1 && paux2){
    if(paux1->info != paux2->info) return (vb=0);
    paux1=paux1->p_precedent;
    paux2=paux2->p_precedent;
    }
    return (vb); }

  9. Secventa:
    struct dlista {
    int iutil;
    struct dlista *purmator, p_precedent;
    } * p_slista;
    a) defineste tipul de data articol pentru lista dubla
    b)defineste o structura de date utilizabila in construirea unei liste simple
    c) defineste o variabila pointer spre un o structura de tip articol care se initializeaza cu NULL
    d) defineste doua variabile de tip pointer, fiecareia alocandu-i-se cate 2 baiti la definire;
    e) defineste o structura de date autoreferita si o variabila spre tipul structura lista dubla

  10. 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));


  11. Daca este data definirea:
    int x[10];
    si se doreste scrierea unui program in care elementele sa fie
    insumate in variabila s definita prin:
    unsigned int s=0; , atunci domeniul variabilei s este:
    a) [-32768; 32767 ]
    b) [0; 6553]
    c) [0; 6553,5]
    d) identic cu domeniul elementului x[i]
    e) [0; 3276]


  12. 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);
    }

  13. Fisierul F1 avand articole de 100 baiti si de 150 de baiti este:
    a) un fisier cu articole de lungime cand de 100 baiti, cand 150 baitidar cand se citeste de la ultimul articol spre primul, trebuie ca ultimul bait (101, respectiv, 151) sa contina lungimea
    b) un fisier cu articole de lungime oarecare daca articolul
    este un vector cu numar de 100 sau de 150 elemente initializateindiferent cum se citesc articolele
    c) un fisier cu articole de lungime variabila pentru care pe primul bait si pe ultimul bait se trece una din lungimile 100 sau 150 baiti pentru a asigura citirea corecta din ambele sensuri
    d) un fisier cu articole de lungime fixa-variabila care se scrie intr-un mod si se citeste altfel
    e) un fisier cu articole avand aceeasi structura de campuridar campurile au lungimi diferite astfel incat pe total lungimile sunt diferite la articole


  14. Daca este data definirea:
    unsigned int x[10];
    si se doreste scrierea unui program in care elementele sa fie
    insumate in variabila s definita prin:
    int s=0; , atunci:
    a) domeniul unui element x[i] este [-32768; 32767 ]
    b) domeniul unui element x[i] este [0; 65535]
    c) domeniul elementului x[i] este [0; 6553,5]
    d) domeniul elementului x[i] este identic cu domeniul elementului x[i]
    e) domeniul elementelor masivului este [0; 3276]


  15. 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;
    }


  16. Cautarea intr-o lista simpla este realizata de:
    a) functia cu tre parametri si anume: parametrul unu este pointerul spre caul listei, parametrul doi indica pozitia elementului cautat si parametrul trei da valoarea cheii de cautare
    b) functia care are doi parametri si anume: cheia si pozitia; pointerul cu care se refera primul element este obligatoriu definit variabila statica;
    c) o functie care returneaza NULL d)functia:
    struct slist *( cautare struct slist * plist, valoare)
    {
    struct slist p_temp;
    for(p_temp=plist; p_temp != NULL; p_temp=p_temp->p_urmator)
    if(p_temp->informatia_utila == valoare) return (p_temp);
    return(NULL);
    }
    d) o functie care mai intai traverseaza intrega lista pentru a vedea ca nu este lista vida si dupa aceea se executa cautarea dupa valoare si dupa cheie
    e) functia:
    struct slist *( cautare struct slist * plist, valoare)
    {
    struct slist p_temp;
    for(p_temp=plist; p_temp != NULL; p_temp=p_temp->p_urmator)
    if(p_temp->informatia_utila == valoare) return (p_temp);
    else functia:
    return(NULL);
    }

  17. Interschimbul elementelor corespondente ale masivelor bidimensionale
    definite prin:
    int x[10][10], y[10][10];
    se realizeaza :
    a) direct intre cele doua elemente
    b) folosind doua variabile de lucru definite prin instructiunea
    int a,b;
    ...............
    a=x[i][j];
    b=y[i][j]:
    x[i][j]=b;
    y[i][j]=a;
    ...........

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

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

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


  18. Traversarea unei liste simplu inlantuita este asigurata de implementarea structurii repetitive:
    a) paux=pcls;
    for( ; paux->purm; paux=paux->purm)

    unde:
    pcls - pointer spre adresa primului element al listei simple
    paux - variabila pointer de lucru
    purm - variabila membru in alcatuirea unui element al listei simple,
    care memoreaza adresa urmatorului element al listei
    b) paux=pcls;
    for(paux=pcls; pcls->purm; pcls=pcls->purm)

    unde, pcls este variabila pointer definita static si care contine adresa primului element al listei simple , iar paux este un pointer de lucru c) for(; pcls->purm!=NULL; pcls=pcls->purm)
    unde, pcls este variabila pointer care contine adresa primului element al listei simple

    d) for(pcls=paux; pcls->purm; pcls=pcls->purm)
    unde:
    pcls - pointer spre adresa primului element al listei simple
    paux - variabila pointer de lucru
    purm - variabila membru in alcatuirea unui element al listei simple,
    care memoreaza adresa urmatorului element al listei
    e) for(pcls=paux; pcls->purm!=NULL; pcls=pcls->purm)
    unde:
    pcls - pointer spre adresa primului element al listei simple
    paux - variabila pointer de lucru
    purm - variabila membru in alcatuirea unui element al listei simple,
    care memoreaza adresa urmatorului element al listei

  19. 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 ARBIN; // definire tip pointer spre arbin
    atunci procedura pentru numararea nodurilor frunza din arborelebinar este:
    a) void numara_frunze (ARBIN *pradacina)
    {
    if(!pradacina)return(0);
    if(!(pradacina->pst)&&!(pradacina->pdr))return (1);
    return(numara_frunze(pradacina->pst) + numara_frunze(pradacina->pdr));
    }
    b) void numara_frunze (ARBIN *pradacina)
    {
    if(pradacina!=NULL)return(0);
    if((pradacina->pst==NULL)&&(pradacina->pdr==NULL))return (1);
    return(numara_frunze(pradacina->pst) + numara_frunze(pradacina->pdr));
    }
    c) void numara_frunze (ARBIN *pradacina)
    {
    if(pradacina)return(0);
    if((pradacina->pst==NULL)&&(pradacina->pdr==NULL))return (1);
    return(numara_frunze(pradacina->pst) + numara_frunze(pradacina->pdr)+1);
    }
    d) void numara_frunze (ARBIN *pradacina)
    {
    if(pradacina==NULL)return(1);
    if((pradacina->pst==NULL)&&(pradacina->pdr==NULL))return (1);
    return(numara_frunze(pradacina->pst) + numara_frunze(pradacina->pdr));
    }
    e) void numara_frunze (ARBIN *pradacina)
    {
    if(pradacina==NULL)return(1);
    if((pradacina->pst)&&(pradacina->pdr)return (1);
    return(numara_frunze(pradacina->pst) + numara_frunze(pradacina->pdr));
    }

  20. Daca lista simpla este definita prin:
    struct slista
    {
    int info;
    struct slista *peu;
    } *pcpls, *pinsert;
    iar pcpls este pointer spre primul element al listei si pinsert este pointer
    spre lemenetul care se insereaza, atunci procedura:
    a) void insertie (struct slista *pcpls, struct slista *pinsert)
    {
    //construire element de inserat pinsert=(struct slista *) malloc(sizeof(struct slista)); pinsert->peu=NULL; scanf("%d",&pinsert->info);
    pinsert->peu=pcpls;
    pcpls=pinsert;
    }
    nu este destinata inserarii unui element in capul listei
    b) void insertie (struct slista *pcpls, struct slista *pinsert)
    {
    //construire element de inserat pinsert=(struct slista *) malloc(sizeof(struct slista)); pinsert->peu=NULL; scanf("%d",&pinsert->info);
    pinsert->peu=pcpls;
    pcpls=pinsert;
    }
    estre destinata inserarii unui element in capul listei

    c) void insertie (struct slista *pcpls, struct slista *pinsert)
    {
    pinsert.peu=pcpls;
    pcpls=pinsert;
    }
    estre destinata inserarii unui element in capul listei,
    daca elementul care trebuie inserat a fost construit
    d) void insertie (struct slista *pcpls, struct slista *pinsert,int winfo)
    {
    //construire element de inserat pinsert=(struct slista *) malloc(sizeof(struct slista)); pinsert.peu=NULL; scanf("%d",&pinsert->info);
    *pinsert.info=winfo;
    pinsert.peu=pcpls;
    pcpls.peu=pinsert;
    }
    estre destinata inserarii unui element in capul listei

    e) void insertie (SLISTA *pcpls, SLISTA *pinsert)
    {
    //construire element de inserat pinsert=(struct slista *) malloc(sizeof(struct slista)); pinsert.peu=NULL; scanf("%d",&pinsert->info);
    pinsert.peu=pcpls;
    pcpls=pinsert;
    }
    estre destinata inserarii unui element in capul listei dacatipul SLISTA a fost definit prin :

    typedef struct slista ** SLISTA;