• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista cykliczna jednokierunkowa

Object Storage Arubacloud
0 głosów
1,793 wizyt
pytanie zadane 15 kwietnia 2017 w C i C++ przez Lemon Nowicjusz (210 p.)

Cześć potrzebuję przerobić tą listę jednokierunkową na listę cykliczną jednokierunkową. Wiem że ostatni element ma wskazywać na pierwszy ale nie wychodzi mi za bardzo przerabianie tego kodu.

 #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;
   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\n", wsk->val);
     wsk = wsk->next;
     }
 }
 
 int jest_pierwsza(el_listy *lista, int liczba)
 {
   el_listy *wsk;
   wsk = lista;
   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;
   first =(el_listy*) malloc (sizeof(el_listy));
   first->val = 2;
   first->next = NULL;
   for (;i!=END;++i) {
     if (jest_pierwsza(first, i))
       dodaj_do_listy (first, i);
       }
   wypisz_liste(first);
   return 0;
 }

 

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia 2017 przez d0n Mądrala (6,440 p.)
wybrane 23 kwietnia 2017 przez Lemon
 
Najlepsza
Konczysz liste elementem, ktory jest jakos oznaczony ze jest terminatorem, jego next ma wskazywac na pierwszy element listy, dodawanie idzie od poczatku wskaznikiem p az wartosc next bedzie terminatorem i wtedy zamieniasz wartosc  next p na nowy element, a  wartosc next nowego elementu na terminator.

Podobne pytania

0 głosów
0 odpowiedzi 268 wizyt
pytanie zadane 23 grudnia 2018 w C i C++ przez Prospector Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 467 wizyt
pytanie zadane 7 maja 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)
0 głosów
1 odpowiedź 531 wizyt
pytanie zadane 6 listopada 2016 w C i C++ przez Łukasz ER Początkujący (420 p.)

92,581 zapytań

141,433 odpowiedzi

319,666 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...