ďťż

Ładny brzuch

Witam!
Napisałe f-cje która przeszukuje liste 2-kierunkowa pod katem nazwiska
Gdy znajdzie zwraca wskaznik do rekordu

data *find_nazwisko(struct data* wsk, struct data *pocz, char *szukaj) {  wsk=pocz;  do  {   if(strcmp(wsk->nazwisko,szukaj)==0)    return wsk;   else   wsk=wsk->nastepny;  }while(wsk!=NULL); }

Pytania brzmią
1. W jaki sposob zrobić tak aby w momencie gdy na liscie beda dwa takie same nazwiska f-cja zwrociła oba wskazniki ? Po napotkaniu pierwszego jak na razie nastepuje wyjscie z fcji.
2. Założmy ze chcemy wyswietlic wszystkie nazwiska na K lub zaczynajace sie na 'Ka' jak to zrobić ?



1. Masz co najmniej kilka możliwości. Możesz na przykład tworzyć sobie listę pomocniczą ze wskaźnikami do znalezionych elementów i zwracać wskaźnik na jej początek.
2. Jeśli chcesz sprawdzać tylko pierwszą literę to po prostu
if (szukaj[0] == 'K')
Jeśli chcesz kilka pierwszych liter to możesz stworzyć tablicę znaków o takiej długości jaką chcesz sprawdzać (plus 1 dla kończącego zera) i przed każdym sprawdzeniem kopiować do niej daną ilość znaków ze sprawdzanego słowa. Czyli coś takiego:
char tablica[3]; while (wsk) {  strncpy(tablica, wsk->nazwisko, 2);  tablica[2] = 0;  if (!strcmp(tablica, szukaj))  {    // tutaj to co ma się dziać po znalezieniu  }  wsk = wsk->nastepny; }

Poza tym:
- zmień do ... while na while, bo teraz program się wywali jeśli lista będzie pusta,
- jeśli chcesz wyszukiwać w ten sposób to bardziej opłaca się drzewo zastosować, chyba że wpisów będzie na tyle mało, że można sobie pozwolić na tak powolną metodę lub jeśli bardziej zależy Ci na ilości zajmowanej przez program pamięci niż szybkości działania.
Użytkownik Chmurek edytował ten post 11 luty 2006, 03:47
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •