[C] lista...

vokus
Użytkownik
Użytkownik
Posty: 50
Rejestracja: 8 lis 2008, o 00:03
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy

[C] lista...

Post autor: vokus »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
typedef struct element{
        int x;
        struct element * next;
        }element;
        
element * dodaj_na_poczatek (element * head, int x);


int main(int argc, char *argv[])
{
    element * head = NULL;
    dodaj_na_poczatek (head, 2);
    printf("%d", head->x);
  
  system("PAUSE");	
  return 0;
}

element * dodaj_na_poczatek (element * head, int x){
       element * nowy=(element*) malloc(sizeof(element));
       
       nowy->x=x;
       nowy->next=NULL;
       
       if(head) nowy->next=head;
       
       head=nowy;
       }
może mi ktoś powiedzieć dlaczego to nie działa?
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

[C] lista...

Post autor: argv »

Na 1 rzut oka : pamiętaj, że

Kod: Zaznacz cały

head=nowy;
head jest kopią wskaźnika i ginie po zakończeniu funkcji. Trwałe zmiany to albo podwójny wskaźnik albo return (swoją drogą nie widzę go tu, mimo że funkcja powinna coś zwracać).
abc666

[C] lista...

Post autor: abc666 »

typedef struct element{
int x;
struct element * next;
}element;
Po co tworzysz zmienną element typu element? Zresztą pytanie dlaczego to nie działa jest bez sensu. Co to znaczy nie działa? Błąd podczas kompilacji, błąd czasu wykonania, komputer zaczyna tańczyć ?
vokus
Użytkownik
Użytkownik
Posty: 50
Rejestracja: 8 lis 2008, o 00:03
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy

[C] lista...

Post autor: vokus »

poprawiłem ale nadal nie działa

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
typedef struct element{
        int x;
        struct element * next;
        }element;
        
 element * dodaj_na_poczatek (element * head, int x);


int main(int argc, char *argv[])
{
    element * head = NULL;
    dodaj_na_poczatek (head, 2);
    printf("%d", head->x);
  
  system("PAUSE");	
  return 0;
}

        element * dodaj_na_poczatek (element * head, int x){
       element * nowy=(element*) malloc(sizeof(element));
       
       nowy->x=x;
       nowy->next=NULL;
       
       if(head) nowy->next=head;
       
       head=nowy;
       
       return head;
       }
program się kompiluje, ale wysypuje się przy uruchomieniu. Nie rozumiem pytania o zmienną. Nazywam tą strukturę element po to, żeby nie musieć wszędzie pisać struct element.
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

[C] lista...

Post autor: argv »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
typedef struct element{
    int x;
    struct element * next;
}element;
       
element * dodaj_na_poczatek (element * head, int x);


int main(int argc, char *argv[])
{
    element * head = NULL;
    head = dodaj_na_poczatek (head, 2);
    printf("%d", head->x);
 
  system("PAUSE");   
  return 0;
}

element * dodaj_na_poczatek (element * head, int x){
       element * nowy=(element*) malloc(sizeof(element));
       
       nowy->x=x;
       nowy->next=head;
       head=nowy;
       
       return head;
}
vokus
Użytkownik
Użytkownik
Posty: 50
Rejestracja: 8 lis 2008, o 00:03
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy

[C] lista...

Post autor: vokus »

no tak, ale teraz ten kod działa tylko dla pierwszego elementu i nie da rady utworzyć listy
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

[C] lista...

Post autor: argv »

Kod: Zaznacz cały

    ...    element * head = NULL;    for(i = 1; i < 10; i++) {        head = dodaj_na_poczatek (head, i);    }    ...    wyswietl(head); 
Wynik: 9 8 7 6 5 4 3 2 1

W czym problem ? Jakiej listy nie daje się utworzyć ? Co działa tylko dla pierwszego elementu ?
ODPOWIEDZ