GRY-Online.pl --> Archiwum Forum

C++ algorytm przeszukiwania kolejki

03.04.2008
21:42
[1]

lo0ol [ Jónior ]

C++ algorytm przeszukiwania kolejki

Haj,

sprawa dot. struktury dynamicznej, kolejki blabla.
Nauczyciel na lekcji programowania tłumaczył nam zasadę taka ęe adres każdego elementu w kolejce wskazuje na następny element. Na podstawie tego napisał na tablicy słownie algorytm przeszukiwania tego wytworu, a zaraz później narysował schemat blokowy wyglądający mniej więcej tak ->

Z tego co wywnioskowałem to algorytm przedstawiony na schemacie działa następująco:
1. Wartość zmiennej bieżący ustawiana jest na wierzchołek (czyli adres początku kolejki)
2. jeżeli dane zawarte w zmiennej bieżący:
2.a. są równe szukana to program sie kończy
2.b. są inne to program idzie dalej
2.b.1. bieżący jest ustawiany na adres kolejnego elementu
2.b.2. program idzie aż do końca kolejki po czym sie kończy

Czy:
Instrukcja warunkowa w prawej dolnej części obrazka przeleci w ogóle element DRUGI?
Bo:
1.sprawdzany jest element pierwszy pod względem zawartości danych (== szukana)
2.zmienna bieżący ustawiana jest na element drugi (równe dotychczasowemu adresowi zmiennej bieżący)
3.sprawdzany jest ADRES zmiennej bieżący (już zmienionej na adres elementu drugiego) czyli element trzeci


C++ algorytm przeszukiwania kolejki - lo0ol
03.04.2008
21:57
[2]

Gibon91 [ Jestem Zajebisty ]

Jak dla mnie to ten "algorytm" sprawdza pierwszy element kolejki, jeśli jest w nim wartość to zwraca wskaźnik to pierwszego elementu kolejki, w przeciwnym wypadku zwraca wskaźnik do elementu ostatniego.

EDIT:
Mniej wiecej tak to powinno wyglądać w c++ (jeśli nie zastosujemy straznika):
typ bierzacy;
bierzacy=kolejka.poczatek;
while(bierzacy!=NULL&&bierzacy.dane!=szukane)

bierzacy=bierzacy.adres;

if(bierzacy!=NULL)
cout<<"jest";
else
cout<<"ni ma";

Chyba sie nigdzie nie pomyliłem.

03.04.2008
21:59
[3]

Regis [ ]

j.w. - ten algorytm wykonuje tylko JEDNO porownanie wartosci szukanej z elementem (pierwszym). Potem tylko przechodzi dalej, az do konca (o ile nie trafi przy pierwszym elemencie). Lipny ten algorytm.

03.04.2008
22:06
[4]

lo0ol [ Jónior ]

To że porównywany jest tylko pierwszy element to nie ulega wątpliwości ale interesuje mnie sprawa czy pętla warunkowa zahaczy DRUGI element kolejki? Moim zdaniem w pierwszym warunku (==szukana) program porównuję 1 element, a w drugim od razu trzeci (czy jest różny od 0).

Gibon, zamiast && dałbym ||. :)

03.04.2008
22:13
[5]

Gibon91 [ Jestem Zajebisty ]

Nie jestem pewien czy dobrze zrozumiałem o co ci chodzi, ale chyba masz rację. Jeżeli nie ma drugiego elementu kolejki to bierzacy ustawi sie na NULL nie sprawdzając czy pod zmienna adres w 1 elemencie coś jest.

A co do twojej uwagi o operatorach logicznych, to tam błędu nie ma :)
Pętla ma działać dopóki bierzace nie jest ustawione na NULL i dopóki wartość nie jest równa szukanej szukana (bo to oznacza ze znaleziono obiekt szukany.).

03.04.2008
22:23
[6]

lo0ol [ Jónior ]

Co do operatorów to moja pomyłka. :p

Ale co do "przeszukiwania" tego to chodzi mi o to że:

1.Program sprawdza wartość elementu 1 (== szukana)
2.Ustawia bieżący na adres dotychczasowego bieżącego (pierwszego elementu) czyli na element drugi
3.Sprawdza ADRES (czyli następny) aktualnego bieżącego (drugiego) ... czyli trzeci element.

Żadna instrukcja warunkowa nie sprawdza wartości elementu drugiego nie zależnie od tego czy coś w nim jest, czy też nie?

03.04.2008
22:33
[7]

pszczesz [ Centurion ]

Wydaje mi się, że biezac=biezacy.adres trzeba usnąc oraz strzałkę przesunąć przed pierwszą inst warunkową i powinno być ok

03.04.2008
22:37
[8]

lo0ol [ Jónior ]

pszczesz, tak wtedy program by przeszukiwał każdy element pod względem zawartości "szukana" ale, ok. Jeżeli już to edytuję tak jak powiedziałeś to czy sprawdzony zostanie drugi element kolejki?

03.04.2008
22:42
[9]

pszczesz [ Centurion ]

przedobrzyłem bieżacy =bieżacy.następny trzeba dać do galęzi T drugiej instr warunkowej

© 2000-2024 GRY-OnLine S.A.