[ bore_lee_2 @ 09.04.2007. 09:47 ] @
Ko prvo nisam neki vješti programer i zato tu trebam malu pomoć,pokušavam skuzit gresku al mi baš ne ide uglavnom program simulira ATM switch koristeci jednostruko povezanu listu. Sve radi u redu ukoliko se doda samo jedan "celija" -cvor,al cim dodam dvije brojac cvorova mi se vrti u nedogled,nesto sam s memorijom ili zapisom u listu zeznuo. evo koda: javi mi dva warninga kod ovog scanf-a,da je declared deprecated,radim u VS2005 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <malloc.h> struct s1 { struct s1 *sljedeci; int ID; int CLP; }; typedef struct s1 celija; void dodaj_u_listu(celija **glava,celija *tmp) { //dodaje u listu celija *p; tmp->sljedeci=NULL; if (*glava==NULL) { *glava=tmp; } else { p=*glava; while (p->sljedeci!=NULL) p=p->sljedeci; p->sljedeci=tmp; } } void salji_na_link_jedan(celija **glava) { //izbacuje jedinice celija *p,*r; if(*glava==NULL){ printf("Neuspjelo slanje celije na link!\n\n"); } else { p=*glava; r=NULL; do { if(p->CLP==1){ if(p==NULL)return; if(r==NULL) { *glava=p->sljedeci; printf("Poslana je celija broj %d,sa vrijednosti CLP polja: %d\n",p->ID,p->CLP); } else{ r->sljedeci=p->sljedeci; printf("Poslana je celija broj %d,sa vrijednosti CLP polja: %d\n",p->ID,p->CLP); } } r=p; p=p->sljedeci; }while(p!=NULL); } } void salji_na_link_dva(celija **glava) { // izbacuje nule celija *p,*r; if(*glava==NULL){ printf("Neuspjelo slanje celije na link!\n\n"); } else { p=*glava; r=NULL; do { if(p->CLP==0){ if(p==NULL)return; if(r==NULL) { *glava=p->sljedeci; printf("Poslana je celija broj %d,sa vrijednosti CLP polja: %d\n",p->ID,p->CLP); } else{ r->sljedeci=p->sljedeci; printf("Poslana je celija broj %d,sa vrijednosti CLP polja: %d\n",p->ID,p->CLP); } } r=p; p=p->sljedeci; }while(p!=NULL); } } int broj_celija(celija **glava,int k) { //broji celije celija *p; p=*glava; while (p!=NULL) { k++; p=p->sljedeci; } return k; } int ispid_id_celija(celija *glava) { //ispis ID celija if(glava==NULL) { return 0; } while (glava) { printf("ID celije: %d\n",glava->ID); glava=glava->sljedeci; } return 1; } void main () { //MAIN PROGRAM int a,G=1,i,j,k=0; int CLP=2; int num_celija; celija *glava=NULL; celija *tmp; tmp=(celija*)malloc(sizeof(celija)); char c[5]; int zastavica=1; srand((unsigned)time(NULL)); for (i=0;i<30;i++) { if(zastavica==1) { printf("Odaberi: \n"); printf("(1) Primanje nove celije\n"); printf("(2) Slanje celije na link\n"); printf("(3) Broj celija u repu\n"); printf("(4) Ispis ID celija u repu\n"); printf("(5) Kraj rada\n\n"); scanf("%d",&a); switch (a) { case 1: printf("Primanje nove celije---->"); tmp->ID=G; CLP=rand()%2; tmp->CLP=CLP; dodaj_u_listu(&glava,tmp); printf("Celija %d primljena\n",G); G++; break; case 2: if (CLP==1){ salji_na_link_jedan(&glava); break; } if (CLP==0) { salji_na_link_dva(&glava); break; } else printf("Neuspjelo slanje celije na link\n"); break; case 3: num_celija=broj_celija(&glava,k); printf("U repu je %d celija\n\n",num_celija); break; case 4: j=ispid_id_celija(glava); if (j==0) { printf("U repu nema celija\n\n"); } break; case 5: zastavica=0; break; } } } } |