Struktury danych w c / listy jednokierunkowe

Fristajler
Użytkownik
Użytkownik
Posty: 45
Rejestracja: 9 sty 2008, o 12:22
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 4 razy

Struktury danych w c / listy jednokierunkowe

Post autor: Fristajler »

Mam następujące zadania:

1. Napisz funkcję struct node * reverse (struct node * lista), która odwróci kolejność elementów danej listy jednokierunkowej i zwróci odwróconą listę. Ponadto opisz jej działanie.

2. Napisz funkcję struct node * parz (struct node * lista), która przestawi tak elementy listy, że na początku bedą parzyste elementy, a na końcu - nieparzyste, czyli przykładowo z listy 1 2 3 4 5 powstanie lista 2 4 1 3 5. Dodatkowo funkcja ma zwrócić zadany porządek listy. Krótko opisz działanie tej funkcji.

Byłbym zobowiązany za rozwiązanie, bo jakoś nie mogę tego rozgryźć. Pozdrawiam.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Struktury danych w c / listy jednokierunkowe

Post autor: kadiii »

W pierwszym. wszystko zalezy jaki rodzaj kolejki. W drugim to chyba najprościej przeszukujesz wszystkie po kolei i jak znajdujesz parzysty to dajesz na początek(powiedzmy na miejsce, które oznacza zmienna begin) i zwiększasz to begin o jeden żeby parzyste pozostały w kolejności początkowej, a dalej od ostatniego sprawdzonego miejsca powtarzasz sprawdzanie aż do końca listy. To tak najbardziej czytelnie i wprost.
Fristajler
Użytkownik
Użytkownik
Posty: 45
Rejestracja: 9 sty 2008, o 12:22
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 4 razy

Struktury danych w c / listy jednokierunkowe

Post autor: Fristajler »

kadiii pisze:W pierwszym. wszystko zalezy jaki rodzaj kolejki. W drugim to chyba najprościej przeszukujesz wszystkie po kolei i jak znajdujesz parzysty to dajesz na początek(powiedzmy na miejsce, które oznacza zmienna begin) i zwiększasz to begin o jeden żeby parzyste pozostały w kolejności początkowej, a dalej od ostatniego sprawdzonego miejsca powtarzasz sprawdzanie aż do końca listy. To tak najbardziej czytelnie i wprost.
Ok. A jak by to wyglądało w postaci pseudokodu?
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Struktury danych w c / listy jednokierunkowe

Post autor: kadiii »

Myślałem,że piszę dość czytelnie, ale ok. Masz tu słownie żeby już nie było wątpliwości.
1.begin=0 i=0 //lub 1 w zależności jak numerujesz listę
2.Sprawdź i-ty element. Jeśli i>n zakończ, w przeciwnym wypadku jeśli wartość parzysta to punkt 3. w przeciwnym wypadku zwiększ i o 1 i ponów punkt 2.
3.Umieść i-ty element listy na pozycji o numerze begin. Zwiększ begin o 1. Zwiększ i o 1. Powróć do punktu 2.

Teraz już bez problemu zakodujesz, jeśli oczywiście znasz podstawy języka C.
Fristajler
Użytkownik
Użytkownik
Posty: 45
Rejestracja: 9 sty 2008, o 12:22
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 4 razy

Struktury danych w c / listy jednokierunkowe

Post autor: Fristajler »

kadiii pisze:Myślałem,że piszę dość czytelnie, ale ok. Masz tu słownie żeby już nie było wątpliwości.
1.begin=0 i=0 //lub 1 w zależności jak numerujesz listę
2.Sprawdź i-ty element. Jeśli i>n zakończ, w przeciwnym wypadku jeśli wartość parzysta to punkt 3. w przeciwnym wypadku zwiększ i o 1 i ponów punkt 2.
3.Umieść i-ty element listy na pozycji o numerze begin. Zwiększ begin o 1. Zwiększ i o 1. Powróć do punktu 2.

Teraz już bez problemu zakodujesz, jeśli oczywiście znasz podstawy języka C.
No dobra. Może na spokojnie to rozgryzę. Słabo mi idzie prog. w C. Więc jak by ktoś cos tu napisał, to będę bardzo wdzięczny.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

Struktury danych w c / listy jednokierunkowe

Post autor: kadiii »

Trochę dziwne rozumowanie, że jeżeli nie umiem podstaw języka, a chcę napisać algorytm w tym języku to zamiast się tego nauczyć, proszę o gotowce. No, ale może nie mogłeś znaleźć materiałów. Oto przykładowe: O strukturach dynamicznych w języku C , kurs języka C . Miłej pracy
Fristajler
Użytkownik
Użytkownik
Posty: 45
Rejestracja: 9 sty 2008, o 12:22
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 4 razy

Struktury danych w c / listy jednokierunkowe

Post autor: Fristajler »

Poczekam aż się inni wypowiedzą ;) Ale dzięki za linki. Przydadzą mi się.

[ Dodano: 27 Maj 2008, 22:27 ]
Ok. prosze o sprawdzenie i ewentualnie poprawienie. Zadanie 1:

Kod: Zaznacz cały

struct node

{

       int data;
       struct node * next;
}

struct node * reverse( struct node *list)

{
struct node * previous, *last;

          previous = list;
          list = list ->next;
          last = list->next;

    while (list->next != NULL)

    {

         list->next = previous;
         previous = list;
         list = last;
         last= last ->next;

     }
return list;
}
I zadanie drugie:

Kod: Zaznacz cały

struct node *parz (struct node *lista)
{
struct node *prev, *last;
prev=lista;
lista=lista->next;
last=lista->next;
int i=0;
if (i%2==0)
{
    i=prev;
    i++;
}
else if (i%2==1)
{
    i=last;
    i++;
}
}
ODPOWIEDZ