listy w języku C

robertm19
Użytkownik
Użytkownik
Posty: 1847
Rejestracja: 8 lip 2008, o 21:16
Płeć: Mężczyzna
Lokalizacja: Staszów/Warszawa
Podziękował: 7 razy
Pomógł: 378 razy

listy w języku C

Post autor: robertm19 »

Mam problem z listami w języku C. W ogóle nie wiem z czym to się je. Jak możecie to sprawdzić to:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

typedef struct element {
  struct element *next;
  unsigned long val;
} el_listy;

el_listy **first;

void dodaj_do_listy (el_listy **lista, unsigned long liczba)
{
  el_listy *wsk, *nowy;
  if (*lista==NULL)
  {*lista=nowy;
  nowy->val=liczba;
  nowy->next=NULL;
  return; }
  wsk = *lista;
  while (wsk->next != NULL)
    { 
    wsk = wsk->next; /* przesuwamy wsk aż znajdziemy ostatni element */
    }
  nowy = (el_listy *)malloc (sizeof(el_listy));
  nowy->val = liczba;
  nowy->next = NULL;
  wsk->next = nowy; /* podczepiamy nowy element do ostatniego z listy */
}

void wypisz_liste(el_listy **lista)
{
  el_listy *wsk=*lista;
  while( wsk != NULL )
    {
    printf ("%lu
", wsk->val);
    wsk = wsk->next;
    }
}

int jest_pierwsza(el_listy **lista, int liczba)
{
  el_listy *wsk;
  wsk = *first;
  while (wsk != NULL) {
    if ((liczba%wsk->val)==0) return 0;
       wsk = wsk->next;
    }
    return 1;
}

int main ()
{
  unsigned long i = 3; /* szukamy liczb pierwszych w zakresie od 3 do 1000 */
  const unsigned long END = 1000;
    for (;i!=END;++i) {
    if (jest_pierwsza(first, i))
      dodaj_do_listy (first, i);
      }
  wypisz_liste(first);
  return 0;
}
Ostatnio zmieniony 10 lip 2008, o 20:29 przez robertm19, łącznie zmieniany 1 raz.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

listy w języku C

Post autor: soku11 »

Z checia bym sprawdzil, ale po skopiowaniu kodu i probie odpalenia odrazu sie zwiesza... POZDRO
robertm19
Użytkownik
Użytkownik
Posty: 1847
Rejestracja: 8 lip 2008, o 21:16
Płeć: Mężczyzna
Lokalizacja: Staszów/Warszawa
Podziękował: 7 razy
Pomógł: 378 razy

listy w języku C

Post autor: robertm19 »

no wlasnie nie dzial i nie wiem dlaczego ??
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

listy w języku C

Post autor: soku11 »

Gdzies pewnie sie odwolujesz typu NULL-> costam i wyrzuca blad ochrony.
Zaraz ci napisze moj kod (duzo sie nie bedzie roznil od twojego) BTW. Troche nie rozumiem tego twojego sprawdzania, czy liczba jest pierwsza... Napisze po swojemu. POZDRO
robertm19
Użytkownik
Użytkownik
Posty: 1847
Rejestracja: 8 lip 2008, o 21:16
Płeć: Mężczyzna
Lokalizacja: Staszów/Warszawa
Podziękował: 7 razy
Pomógł: 378 razy

listy w języku C

Post autor: robertm19 »

oki nie wzoruj sie moim kodem bo na pewno jest zle , po prostu chcialem sie nauczyc tych list ale cos mi n ie idzie:)
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

listy w języku C

Post autor: soku11 »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

typedef enum _BOOL{TRUE=1,FALSE=0} BOOL;

typedef struct _NODE
{
  struct _NODE *Next;
  unsigned long Value;
} Node;

Node* Head;

void AddToList(unsigned long Number)
{
  Node* NewElement=(Node*) malloc(sizeof(Node));
  Node* Temp=NULL;
  NewElement->Next=NULL;
  NewElement->Value=Number;

  if(!Head) /* Nie ma listy - podczep na poczatek */
  {
    Head=NewElement;
    return;
  }

  Temp=Head;
  while(Temp->Next) /* Odnajdujemy ostatni element */
    Temp=Temp->Next;
  Temp->Next=NewElement; /* I podczepiamy go pod ostatni element */
}

BOOL IsFirst(const unsigned long Number)
{
  unsigned long i=2;
  if(Number==0 || Number==1)
    return FALSE;
  if(Number==2)
    return TRUE;

  for(;i<=Number/2;++i)
    if(Number%i==0)
      return FALSE;

  return TRUE;
}

void PrintList()
{
  Node* Temp=Head;
  while(Temp)
  {
    printf("%lu ",Temp->Value);
    Temp=Temp->Next;
  }
}

int main ()
{
  const unsigned long Start=3;
  const unsigned long End=1000;
  unsigned long i=Start;

  for (;i!=End;++i)
    if (IsFirst(i))
      AddToList(i);

  PrintList();
  return 0;
}

Ja to widze jakos tak POZDRO
ODPOWIEDZ