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

Lista cykliczna jednokierunkowa

Cloud VPS
0 głosów
1,978 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 317 wizyt
pytanie zadane 23 grudnia 2018 w C i C++ przez Prospector Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 811 wizyt
pytanie zadane 7 maja 2017 w C i C++ przez krzakurts Obywatel (1,470 p.)
0 głosów
1 odpowiedź 720 wizyt
pytanie zadane 6 listopada 2016 w C i C++ przez Łukasz ER Początkujący (420 p.)

93,488 zapytań

142,422 odpowiedzi

322,773 komentarzy

62,907 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

Kursy INF.02 i INF.03
...