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

Jednostruko povezana lista

[es] :: C/C++ programiranje :: C/C++ za početnike :: Jednostruko povezana lista

[ Pregleda: 4412 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bore_lee_2
Zagreb

Član broj: 141623
Poruke: 2
*.adsl.net.t-com.hr.



Profil

icon Jednostruko povezana lista09.04.2007. u 09:47 - pre 206 meseci
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;
}

}
}

}



 
Odgovor na temu

bore_lee_2
Zagreb

Član broj: 141623
Poruke: 2
*.adsl.net.t-com.hr.



Profil

icon Re: Jednostruko povezana lista09.04.2007. u 10:07 - pre 206 meseci
Evo hvala riješeno,prije slanja svake ćelije trebao sam rezervirat mem. za tmp,a nisam to napravio
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Jednostruko povezana lista

[ Pregleda: 4412 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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