Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

alokacija memorije u zadatku sa listama i cvorovima.

[es] :: C/C++ programiranje :: alokacija memorije u zadatku sa listama i cvorovima.

[ Pregleda: 1544 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

virtualx
bihać - BIH

Član broj: 5930
Poruke: 3383
91.191.20.*

ICQ: 11


+4 Profil

icon alokacija memorije u zadatku sa listama i cvorovima.29.01.2008. u 08:20 - pre 197 meseci
Code:

#include <iostream.h>
#include <conio.h>
struct Cvor{
    int nazivc;
   Cvor *sljedeci;
   };
Cvor *glava = NULL, *rep = NULL;
Cvor *iniCvor();
int brojClanova();
bool praznaLista();
void brisiCvor();
void dodajCvor(Cvor *cvor);
void dodajCvorNaPoz(Cvor *cvor, int poz);
void isprazniListu();
void ispisListe();
void main(){
int opcija = 1, poz;
Cvor *cvor;
while(opcija != 0){
cout<<"Meni:"<<endl;
cout<<endl;
cout<<"1. Unos novog cvora "<<endl;
cout<<"2. Unos novog cvora na poziciju "<<endl;
cout<<"3. Brisi prvi cvor "<<endl;
cout<<"4. Brisanje svih cvorova "<<endl;
cout<<"5. Ispis "<<endl;
cout<<"0. Izlaz "<<endl;
cout<<endl;
cout<<"Izaberite opciju:";
cin>>opcija;
switch(opcija){
case 1:
    cvor = iniCvor();
    dodajCvor(cvor);
    break;
case 2:
    cout<<"Pozicija na koju zelite unijeti vas cvor je:";
    cin>>poz;
    cvor = iniCvor();
    dodajCvorNaPoz(cvor, poz);
    break;
case 3:
    brisiCvor();
    break;
case 4:
    isprazniListu();
    break;
case 5:
    ispisListe();
    break;
    }
  }
}
Cvor *iniCvor(){
    int nazivc;
    cout<<"Unesite broj cvora: ";
    cin>>nazivc;
    Cvor *pokCvor = new Cvor();
    if(pokCvor == NULL){
        cout<<"Unos nije dobar, pokusajte ponovo "<<endl;
        return NULL;
        }
    pokCvor->nazivc = nazivc;
    pokCvor->sljedeci = NULL;
    return pokCvor;
    }
    void dodajCvor(Cvor *cvor){
        if(glava == NULL){
        glava = cvor;
        rep = cvor;
        }
    else{
        cvor->sljedeci = glava;
        glava = cvor;
        }
    }
    void dodajCvorNaPoz(Cvor *cvor, int poz){
        int brojac = 2;
        if(poz > brojClanova() + 1 || poz == 0){
            cout<<"Nije moguce unijeti cvor na datu poziciju "<<endl;
            }
        else{
            if(poz == 1){
            dodajCvor(cvor);
            return;
            }
        else if(poz == brojClanova() + 1){
            rep->sljedeci = cvor;
            rep = cvor;
            }
        else{
            Cvor *pret, *sljed;
            pret = glava;
            sljed = pret->sljedeci;
            while(brojac != poz){
              pret = pret->sljedeci;
              sljed = pret->sljedeci;
              brojac++;
              }
            cvor->sljedeci = sljed;
            pret->sljedeci = cvor;
            }
     }
}
void ispisListe(){
    if(praznaLista()){
        cout<<"Lista je prazna "<<endl;
        }
    else{
        Cvor *tmp = glava;
        while(tmp != NULL){
        cout <<tmp->nazivc<<endl;
        tmp = tmp->sljedeci;
        }
    }
}
int brojClanova(){
    int brojac = 0;
    Cvor *tmp = glava;
    while(tmp != NULL){
        brojac++;
        tmp = tmp->sljedeci;
        }
    return brojac;
    }
bool praznaLista(){
    if(glava == NULL)
    return  true;
    else
    return  false;
}
void isprazniListu(){
    if(praznaLista())
    cout<<"Lista je vec prazna "<<endl;
    else{
        while(glava != NULL){
        glava = glava->sljedeci;
        }
    }
}
void brisiCvor(){
    if(praznaLista())
    cout<<"Lista je vec prazna "<<endl;
    else{
        Cvor *tmp = glava;
        glava = glava->sljedeci;
        delete tmp;
        }
}


problem je u ovome:
void isprazniListu(){
if(praznaLista())
cout<<"Lista je vec prazna "<<endl;
else{
while(glava != NULL){
glava = glava->sljedeci;
}
}

treba osloboditi (delocirati) memoriju koju su zauzeli cvorovi ,sa delete.
e sad kako da to uradim.

 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: alokacija memorije u zadatku sa listama i cvorovima.29.01.2008. u 10:11 - pre 197 meseci
lista* pom;
pom = glava;
glava = glava->sljedeci;
delete pom;

Znači, prvo sačuvaš lokaciju elementa kojeg želiš brisati (u varijabli pom), a zatim nakon pozicioniranja na sljedeći element u listi brišeš (dealociraš) pom.
 
Odgovor na temu

virtualx
bihać - BIH

Član broj: 5930
Poruke: 3383
91.191.20.*

ICQ: 11


+4 Profil

icon Re: alokacija memorije u zadatku sa listama i cvorovima.29.01.2008. u 13:40 - pre 197 meseci
hmm, ok, ali kako bi to konacno izgledalo u kodu,kad bi uvrstio,i gdje bi se nalazilo.

 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: alokacija memorije u zadatku sa listama i cvorovima.29.01.2008. u 14:39 - pre 197 meseci
Možda ovako?

Code:
lista* pom;
while(glava != NULL){
pom = glava;
glava = glava->sljedeci;
delete pom;
}
 
Odgovor na temu

virtualx
bihać - BIH

Član broj: 5930
Poruke: 3383
91.191.20.*

ICQ: 11


+4 Profil

icon Re: alokacija memorije u zadatku sa listama i cvorovima.29.01.2008. u 18:53 - pre 197 meseci
void isprazniListu(){
if(praznaLista())
cout<<"Lista je vec prazna "<<endl;
else{
lista* pom;
while(glava != NULL){
pom = glava;
glava = glava->sljedeci;
delete pom;
}
}



dali mozda umjesto lista* ide Cvor*

 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: alokacija memorije u zadatku sa listama i cvorovima.30.01.2008. u 09:43 - pre 197 meseci
Tako je. Ja sam "lista" stavio samo radi primjera ;)
 
Odgovor na temu

[es] :: C/C++ programiranje :: alokacija memorije u zadatku sa listama i cvorovima.

[ Pregleda: 1544 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.