Kód: Vybrať všetko
cestujem (A, D)
________
A -> B -> C -> D
Kód: Vybrať všetko
cestujem (D, A)
__________
D->C->B->A
Kód: Vybrať všetko
cestujem (A, D)
________
A -> B -> C -> D
Kód: Vybrať všetko
cestujem (D, A)
__________
D->C->B->A
Kód: Vybrať všetko
CBusLine(CBusLine & orig){
m_Terminal1 = new TStop(orig.m_Terminal1 -> m_Name);
m_Terminal2 = new TStop(orig.m_Terminal2 -> m_Name);
TStop * tmpx = m_Terminal2;
TStop * copy = orig.m_Terminal1;
while(copy != NULL){
TStop * copy_tmp = new TStop(copy->m_Name);
tmpx -> m_Next = copy_tmp;
copy_tmp -> m_Prev = tmpx;
tmpx = copy_tmp;
copy = copy->m_Next;
}
}
Kód: Vybrať všetko
CBusLine(CBusLine & orig){
m_Terminal1 = new TStop(orig.m_Terminal1 -> m_Name);
TStop * tmpx = m_Terminal1;
TStop * copy = orig.m_Terminal1;
copy = copy ->m_Next;
while(copy != NULL){
TStop * copy_tmp = new TStop(copy->m_Name);
tmpx -> m_Next = copy_tmp;
copy_tmp -> m_Prev = tmpx;
tmpx = copy_tmp;
copy = copy->m_Next;
m_Terminal2 = tmpx;
}
Porovnavat ukazovatele nemozes, nemusi to platit vzdy ze neskor vytvoreny je na vyssej adrese.marek788 napísal:Problem vsak je, ze som nevedel prist na to, ako zistit, ci ist v spojaku dozadu alebo dopredu. Vyriesil som to ale nakoniec tak a zda sa, ze to aj funguje, ze porovnam ukazatele na spojak m_Begin > m_End, a ked je begin vacsie, znamena, ze je v spojaku dalej ako end, a teda musim ist do zadu. Funguje to takto? Mozem to porovnavat? Alebo je tam nejaky hacik? Dakujem.
Ako napísal harrison, smer môžeš zistiť tak, že najprv prehľadáš všetko do konca zoznamu (to by boli cesty smerom dopredu zo začiatočnej zastávky), a potom začneš odpredu (to by už boli cesty smerom dozadu).marek788 napísal: Problem vsak je, ze som nevedel prist na to, ako zistit, ci ist v spojaku dozadu alebo dopredu. Vyriesil som to ale nakoniec tak a zda sa, ze to aj funguje, ze porovnam ukazatele na spojak m_Begin > m_End, a ked je begin vacsie, znamena, ze je v spojaku dalej ako end, a teda musim ist do zadu. Funguje to takto? Mozem to porovnavat? Alebo je tam nejaky hacik? Dakujem.
Kód: Vybrať všetko
#include <malloc.h>
#include <stdio.h>
typedef struct zastavka_t {
char* meno;
struct zastavka_t * prev, next;
} zastavka, *pzastavka;
int main(int argc, char** argv) {
/* nejaké zastávky */
pzastavka zastavky = ...;
...
/* vstup -> prvá a posledná zastávka */
char * prva;
char * posledna;
char dozadu = 0;
/* hľadanie */
pzastavka zaciatok;
pzastavka koniec;
pzastavka curr = zastavky;
do {
if(strcmp(curr->meno, prva)==0) {
/* našli sme prvú zastávku */
zaciatok = curr;
/* ak sme ju našli pred poslednou, pôjdeme pri vypisovaní dopredu */
dozadu = (!dozadu ? dozadu-1 : dozadu);
} else if(strcmp(curr->meno, posledna)==0) {
/* našli sme poslednú zastávku */
koniec = curr;
dozadu++;
}
} while((curr = curr->next)!=NULL);
/* vypisovanie */
curr = zaciatok;
do {
printf("%s", curr->meno);
} while((dozadu && (curr = curr->prev)!=koniec->prev && printf(" -> "))
|| (!dozadu && (curr = curr->next)!=koniec->next) && printf(" -> "));
}