Strona 1 z 1

Struktury danych w c / listy jednokierunkowe

: 20 maja 2008, o 16:14
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.

Struktury danych w c / listy jednokierunkowe

: 20 maja 2008, o 21:58
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.

Struktury danych w c / listy jednokierunkowe

: 21 maja 2008, o 10:37
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?

Struktury danych w c / listy jednokierunkowe

: 21 maja 2008, o 15:26
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.

Struktury danych w c / listy jednokierunkowe

: 21 maja 2008, o 15:49
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.

Struktury danych w c / listy jednokierunkowe

: 21 maja 2008, o 19:07
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

Struktury danych w c / listy jednokierunkowe

: 21 maja 2008, o 19:59
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++;
}
}