Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Segmentation fault
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
slonic~tonic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 26. 10. 2011. (14:16:34)
Postovi: (84)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 4

PostPostano: 19:00 sri, 14. 11. 2012    Naslov: Segmentation fault Citirajte i odgovorite

U kontekstu atp. LIST napiˇite potprogram void ELIMINATE(LIST *L, elementtype x) koji iz liste L izbacuje sve elemente koji su ve ́i od zadanog elementa x. Pretpostavljamo da se podaci tipa elementtype mogu usporedivati standardnim operatorom “≤”. Potprogram treba biti neovisan o implementaciji atp LIST. Pretpostavite da pozicije svih elemenata liste nakon poziva funkcije DELETE ostaju oˇuvane (osim naravno onog elementa kojeg briˇemo).

[code:1]#include<stdio.h>
#include<stdlib.h>
#define elementtype int
typedef struct celltype {
elementtype element;
struct celltype *next;
} celltype;

typedef celltype *LIST;
typedef celltype *position;

position END (LIST L) {
position q;
for(q=L;q->next!=NULL; ) q=q->next;
return q;
}

position MAKE_NULL (LIST *L) {
*L = (celltype*)malloc(sizeof(celltype));
(*L)->next = NULL;
return (*L);
}

void INSERT (elementtype x, position p, LIST *L) {
position t;
t = p->next;
p->next = (celltype*)malloc(sizeof(celltype));
p->next->element = x;
p->next->next= t;
}

void DELETE (position p, LIST *L) {
position t;
if(p->next==NULL) {
printf("Kriva pozicija");
exit(1);
}
t = p->next;
p->next = p->next->next;
free(t);
}

position FIRST (LIST L) {
return L;
}

position NEXT (position p, LIST L) {
if(p->next == NULL) {
printf("Kriva pozicija");
exit(1);
}
return p->next;
}

position PREVIOUS (position p, LIST L) {
position q;
for(q=L;q->next!=p;q=q->next)
return q;
}

elementtype RETRIEVE (position p, LIST L) {
return p->next->element;
}
void ELIMINATE (LIST *L, elementtype x) {
position p;
for(p=FIRST(*L);p!=END(*L);p=NEXT(p, *L)) {
if(RETRIEVE(p, *L) > x) {
position t = p;
p = NEXT(p, *L);
DELETE(t, L);
}
else p = NEXT(p, *L);
}
}
int main(void) {
elementtype y, x;
LIST *L;
position p;
MAKE_NULL(L);
int i, n;
printf("Ucitaj element x: "); scanf("%d", &x);
printf("Koliko ima elemenata u listi? "); scanf("%d", &n);
for(i=0;i<n;i++) {
scanf("%d", &y);
INSERT(y, END(*L), L);
}
for(p=FIRST(*L);p!=END(*L);p=NEXT(p, *L)) {
printf("%d ", RETRIEVE(p, *L));
}
ELIMINATE(L, x);
for(p=FIRST(*L);p!=END(*L);p=NEXT(p, *L)) {
printf("%d ", RETRIEVE(p, *L));
}
return 0;
}[/code:1]


izbacuje mi 'segmentation fault'..
u cem je problem :?
U kontekstu atp. LIST napiˇite potprogram void ELIMINATE(LIST *L, elementtype x) koji iz liste L izbacuje sve elemente koji su ve ́i od zadanog elementa x. Pretpostavljamo da se podaci tipa elementtype mogu usporedivati standardnim operatorom “≤”. Potprogram treba biti neovisan o implementaciji atp LIST. Pretpostavite da pozicije svih elemenata liste nakon poziva funkcije DELETE ostaju oˇuvane (osim naravno onog elementa kojeg briˇemo).

Kod:
#include<stdio.h>
#include<stdlib.h>
#define elementtype int
typedef struct celltype {
    elementtype element;
    struct celltype *next;
} celltype;

typedef celltype *LIST;
typedef celltype *position;

position END (LIST L) {
    position q;
    for(q=L;q->next!=NULL; ) q=q->next;
    return q;
}

position MAKE_NULL (LIST *L) {
    *L = (celltype*)malloc(sizeof(celltype));
    (*L)->next = NULL;
    return (*L);
}

void INSERT (elementtype x, position p, LIST *L) {
    position t;
    t = p->next;
    p->next = (celltype*)malloc(sizeof(celltype));
    p->next->element = x;
    p->next->next= t;
}

void DELETE (position p, LIST *L) {
    position t;
    if(p->next==NULL) {
        printf("Kriva pozicija");
        exit(1);
    }
    t = p->next;
    p->next = p->next->next;
    free(t);
}

position FIRST (LIST L) {
    return L;
}

position NEXT (position p, LIST L) {
    if(p->next == NULL) {
        printf("Kriva pozicija");
        exit(1);
    }
    return p->next;
}

position PREVIOUS (position p, LIST L) {
    position q;
    for(q=L;q->next!=p;q=q->next)
    return q;
}

elementtype RETRIEVE (position p, LIST L) {
    return p->next->element;
}
void ELIMINATE (LIST *L, elementtype x) {
    position p;
    for(p=FIRST(*L);p!=END(*L);p=NEXT(p, *L)) {
        if(RETRIEVE(p, *L) > x) {
            position t = p;
            p = NEXT(p, *L);
            DELETE(t, L);
        }
        else p = NEXT(p, *L);
    }
}
int main(void) {
    elementtype y, x;
    LIST *L;
    position p;
    MAKE_NULL(L);
    int i, n;
    printf("Ucitaj element x: "); scanf("%d", &x);
    printf("Koliko ima elemenata u listi? "); scanf("%d", &n);
    for(i=0;i<n;i++) {
        scanf("%d", &y);
        INSERT(y, END(*L), L);
    }
    for(p=FIRST(*L);p!=END(*L);p=NEXT(p, *L)) {
        printf("%d ", RETRIEVE(p, *L));
    }
    ELIMINATE(L, x);
    for(p=FIRST(*L);p!=END(*L);p=NEXT(p, *L)) {
        printf("%d ", RETRIEVE(p, *L));
    }
    return 0;
}



izbacuje mi 'segmentation fault'..
u cem je problem Confused



_________________
Lakše je naučiti matematiku nego raditi bez nje.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
slonic~tonic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 26. 10. 2011. (14:16:34)
Postovi: (84)16
Spol: žensko
Sarma = la pohva - posuda
= 5 - 4

PostPostano: 20:02 sri, 14. 11. 2012    Naslov: Citirajte i odgovorite

shvatila sam..
u glavnom programu ne pisem " LIST *L; " vec " LIST L"; -.-'
shvatila sam..
u glavnom programu ne pisem " LIST *L; " vec " LIST L"; -.-'



_________________
Lakše je naučiti matematiku nego raditi bez nje.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan