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

da li je ovo u redu...?

[es] :: C/C++ programiranje :: da li je ovo u redu...?

[ Pregleda: 1698 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

anon81718

Član broj: 81718
Poruke: 24
*.PPPoE-3036.sa.bih.net.ba.



Profil

icon da li je ovo u redu...?15.06.2006. u 17:46 - pre 217 meseci
pozdrav!

da skratim,zadatak je ovaj:

na slici je prikazana dvostruko spregnuta cirkularna lista,

implementirati listu sa funkcijama (uz ostale pomocne funkcije koje su potrebne):



e) unos novog cvora na zeljenu poziciju (ako je prazna lista pozicija je 1)

f) brisanje cvora sa zeljene pozicije

g) funkciju za kretanje u desno po listi

h) pronalazak trazenog cvora

link za sliku: http://www.slibe.com/image/631d68db-lista_bmp/

ja sam nesto napravio ne znam da li je to to...isto je lista al ne znam da li je ova spregnuta cirkularna:

Code:

#include<iostream.h>

#include<string.h>



struct cvor

{

   char Ime[20];

   char Prezime[20];

   int br_Index;

   cvor *sljedeci;

};



//dekleracija funkcija

void dodaj(struct cvor *novi);

void dodaj_poz(struct cvor *novi, int pozicija);

void brisicvor(struct cvor *brisi);

void brisilistu(struct cvor *pok);

void brisi_poz(int poz);

void printcvor(struct cvor *pok);

void printlist(struct cvor *pok);

struct cvor *traziime(struct cvor *pok, char *ime);

struct cvor *inicvor(char *ime, char *prezime, int inx);

int br_elemenata();



// implementacija globalnih pokazivaca

cvor *glava = NULL; cvor *rep = NULL;



//implementacija funkcija



void brisi_poz(int pozicija)

{

  struct cvor *tmp;

  struct cvor *pok;

  pok = glava;

  int brojac = 0;

  while(pok != NULL)

  {

    brojac++;

    pok = pok->sljedeci;

  }

  pok = glava;

  if(pozicija == 0 || pozicija > brojac)

    {

      cout <<"Pogresno unijeta pozicija."<<endl;

      return;

    }

    else

    {

      if(brojac == 1)

      {

    glava = NULL;

    rep = NULL;

    cout <<"Lista je izbrisana"<<endl;

        return;

      }

      if (pozicija == 1)

      {

        glava = glava->sljedeci;

        return;

      }

      if(pozicija == brojac)

      {

        for(int i = 0; i < pozicija-2 ;i++)

        {

             pok = pok->sljedeci;    

        }

    tmp = pok->sljedeci;

    rep = pok;

    delete tmp;

    return;

      }

        pok = glava;

              for(int i = 0; i < pozicija - 2;i++)

              {

                pok = pok->sljedeci;

        }

              tmp = pok->sljedeci;

              pok->sljedeci = pok->sljedeci->sljedeci;

        delete tmp;

    }

}

struct cvor *inicvor(char *ime, char *prezime, int inx)

{

    struct cvor *pokcvor;

    pokcvor = new cvor;

    if(pokcvor==NULL)

        return NULL;

    else

    {

        strcpy(pokcvor->Ime, ime);

        strcpy(pokcvor->Prezime, prezime);

        pokcvor->br_Index = inx;

        return pokcvor;

    }

}



int br_elemenata()

{

    

    struct cvor *broj;

    broj = glava;

    int brojac = 0;

    while(broj != NULL)

    {

        brojac = brojac + 1;

        broj = broj->sljedeci;

    }

    return brojac;

}



void dodaj_poz(struct cvor *novi, int pozicija)

{

    int broj, brojac = 1;

    broj = br_elemenata();

    if(pozicija == 1)

    {

        dodaj(novi);

        return;

    }

    if(pozicija == broj+1)

    {

        rep->sljedeci = novi;

        novi->sljedeci = NULL;

        rep = novi;

        return;

    }

    struct cvor *pozicioni;

    pozicioni = glava;

    while(brojac != pozicija - 1)

    {

        brojac++;

        pozicioni = pozicioni->sljedeci;

    }

    novi->sljedeci = pozicioni->sljedeci;

    pozicioni->sljedeci = novi;

}



void dodaj(struct cvor *novi)

{

    if(glava == NULL)

    {

        glava = novi;

        rep = novi;

        glava->sljedeci = NULL;

    }

    else

    {

        novi->sljedeci = glava;

        glava = novi;

    }

}



void brisicvor(struct cvor *brisi)

{

    struct cvor *tmp, *prije;

    tmp = brisi;

    prije = glava;

    if(tmp == prije)

    {

        glava = glava->sljedeci;

        if(rep == tmp)

        rep = rep->sljedeci;

        delete tmp;

    }

    else

    {

        while(prije->sljedeci != tmp)

        {

            prije = prije->sljedeci;

        }

        prije->sljedeci = tmp->sljedeci;

        if(rep == tmp)

        {

            rep = prije;

        }

        delete tmp;

    }

}



void brisilistu(struct cvor *pok)

{

    struct cvor *tmp;

    if(glava == NULL)

        return;

    if(pok == glava)

    {

        glava = NULL;

        rep = NULL;

    }

    else

    {

        tmp = glava;

        while(tmp->sljedeci != pok)

        tmp = tmp->sljedeci;

        rep = tmp;

        while(pok != NULL)

        {

            tmp = pok->sljedeci;

            delete pok;

            pok = tmp;

        }

    }

}



void printcvor(struct cvor *pok)

{

    cout<<"\n\t\tBroj indexa: \t"<<pok->br_Index

        <<"\n\t\tIme: \t\t"<<pok->Ime

        <<"\n\t\tPrezime: \t"<<pok->Prezime<<endl;

}



void printlist(struct cvor *pok)

{

    while(pok != NULL)

    {

        printcvor(pok);

        pok = pok->sljedeci;

    }

}



struct cvor *traziime(struct cvor *pok, char *ime)

{

    while(strcmp(ime, pok->Ime)!= 0)

    {

        pok = pok->sljedeci;

        if(pok == NULL)

            break;

    }

    return pok;

}



//glavni program

int main()

{

    char im[20];

    char pr[20];

    struct cvor *pok;

    int brx,ch=1;

    while(ch != 0)

    {

        cout <<"\n\t\t\tMENI:\n"

        <<"\n\t1.Dodaj element\n"

        <<"\n\t2.Brisi element\n"

        <<"\n\t3.Izlistaj sve\n"

        <<"\n\t4.Dodaj element u poziciju\n"

        <<"\n\t5.Brisi element sa pozicije\n"

        <<"\n\t0.IZLAZ\n\n\tUnesi opciju(0-5)-->";

        cin>>ch;

        switch(ch)

        {

            case 1:

                cout <<"\n\t\tUnesi ime:\t";cin>>im;

                cout <<"\n\t\tUnesi prezime:\t";cin>>pr;

                cout <<"\n\t\tBroj indexa:\t";cin>>brx;

                pok = inicvor(im,pr,brx);

                dodaj(pok);

                break;

            case 2:

                if(glava!=NULL)

                {

                    cout <<"\n\t\tUnesi ime za brisanje elementa liste:";cin>>im;

                    pok =  traziime(glava, im);

                    if(pok == NULL)

                    {

                        cout <<"Ime nije pronadjeno!"<<endl;

                    }

                    else

                        brisicvor(pok);

                }

                else

                    cout <<"Lista je prazna";

                break;

            case 3:

                cout <<"\nIzlistavanje liste:\n";

                printlist(glava);

                break;

            case 4:

                int brojac, pozicija;

                brojac = br_elemenata();

                cout <<"Unesite poziciju za unos elementa(1 - "<<brojac + 1<<"): ";

                cin >>pozicija;

                if(pozicija > brojac+1 || pozicija < 1)

                {

                    cout <<"Greska, nemoguce za unijeti!";

                    break;

                }

                else

                {

                    cout <<"\n\t\tUnesi ime:\t";cin>>im;

                    cout <<"\n\t\tUnesi prezime:\t";cin>>pr;

                    cout <<"\n\t\tBroj indexa:\t";cin>>brx;

                    pok = inicvor(im,pr,brx);

                    dodaj_poz(pok, pozicija);

                }

                break;

            case 5:

                brojac = br_elemenata();

                if (brojac == 0)

                    cout <<"Lista nije kreirana"<<endl;

                else

                {

                    cout <<"\nUnesite poziciju koju zelite izbrisati(1 - "<<brojac<<"): ";

                    cin >>pozicija;

                    brisi_poz(pozicija);

                }

                



        }

    }

    return 0;

}



ZNAM DA JE SOURCE DIG..AL TO MI JE SEMINARSKI...

UNAPRIJED HVALA!!!




[Ovu poruku je menjao X Files dana 15.06.2006. u 19:00 GMT+1]
 
Odgovor na temu

z@re
Zarko Bulatovic
Split

Član broj: 29849
Poruke: 443
*.adsl.net.t-com.hr.



+25 Profil

icon Re: da li je ovo u redu...?15.06.2006. u 19:27 - pre 217 meseci
Hmm...ovako, od oka, mi se pari OK. Najbolje sta mozes provjerit je da izdebagiras program, a za check varijable stavi pointere, pa gledaj jel ti se adrese dobro preklapaju, cirkularno.

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
 
Odgovor na temu

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
*.liwest.at.



Profil

icon Re: da li je ovo u redu...?15.06.2006. u 20:40 - pre 217 meseci
kod double linked list ti treba nesto kao:

Code:

struct Nesto
{
  char *ime;
  
  Nesto *prethodni; // pokazuje na prehodni element liste
  Nesto *sljedeci;   // pokazuje na sljedeci element liste
}


ah da, jos jedan savjet, pazi na adrese. u nekim slucajevima ces mozda morati koristiti dupli pointer iliti pointer na pointer gdje ces reci da tvoja funkcija pokauje na adresu na koju pokazuje prvi pointer kako bi mogao brisati ili dodavati nove elemente.

pozdrav,
erno
 
Odgovor na temu

anon81718

Član broj: 81718
Poruke: 24
*.PPPoE-2160.sa.bih.net.ba.



Profil

icon Re: da li je ovo u redu...?17.06.2006. u 15:52 - pre 217 meseci
aha...znaci u sustini to je to..thx
moram provjerit adrese.

el ne mogu da napravim funkciju za kretanje u desno po listi...to mi nikako nije jasno :(
 
Odgovor na temu

[es] :: C/C++ programiranje :: da li je ovo u redu...?

[ Pregleda: 1698 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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