ALG7
5.1. Listy jednokierunkowe 117
Mając już komplet funkcji pusta, zestaw funkcji decyzyjnych i uniwersalną funkcję odszukaj wsk. możemy pokusić się o napisanie brakującej procedury dorzuci, która będzie służyła do dołączania nowego rekordu do listy danych z jednoczesnym sortowaniem list wskaźników. Załóżmy, że będą tylko dwa kryteria sortowania danych, co implikuje, iż tablica zawierająca „wskaźniki do list wskaźników” będzie miała tylko dwie pozycje (patrz rysunek 5 - 9).
Adres tej tablicy, jak również wskaźniki do listy danych i do nowo utworzonego elementu zostaną obowiązkowo przekazane jako parametry:
void LISTA::dorzuć(ELEMENT *q)
(
II rekord dołączamy bez sortowania
if(info_dane.qlowa==NULL) // lista pusta
info_dane.glowa-info dane.ogon«q; else // coś jest w liście
I
(info_dane.ogon!->nastepny=q; info_dane.ogon=q;
I
II dołączamy wskaźnik do rekordu do listy // posortowanej alfabetycznie: dorzucż(0,q,alfabetycznie);
II dołączamy wskaźnik do rekordu do listy II posortowanej wg zarobków: dorzucż(1,ą,wg_zarobkow);
)
Funkcja jest bardzo prosta, głównie z uwagi na tajemniczą procedurę o nazwie dorzuci. Oczywiście nie jest to jej poprzedniczka zc strony 101, choć różni się od tamtej doprawdy niewiele:
void LISTA::dorzuc2( int nr,
ELEMENT *q,
int(‘decyzja)(ELEMENT *ql,
ELEMENT *q2>
)
{
LPTR *wsk=new LPTR;
wsk->adres=q; II wpisujemy adres rekordu q //Poszukiwanie właściwej pozycji na wstawienie elementu: if (inf_ptr[nr].glcwa==NULL) // lista pusta (
inf_ptrInrl,glowa=inf_ptr[nr],oqon=wsk;
W3k >nastepny=NULL;
•else //szukamy miejsca na wstawienie I
LPTR "przed,*po;
LPTR_INFO ‘gdzie;
gdzie=odszukaj_wsk(&inf_ptr[nr],q,decyzja)j
przed=gdzie->glowa;
po“gdzie->ogon;
Wyszukiwarka
Podobne podstrony:
ALG 7 5.1. Listy jednokierunkowe 97 public: int pusta() // czy lista jest pusta? {ALG7 5.1. Listy jednokierunkowe 107 cout « "L2 = for (i=0; i<n; 12.dorzuc2(tab2[i++])) ; 12ALG9 5.1. Listy jednokierunkowe 119 wartość zwracaną przez funkcję: w normalnej sytuacji winien toALG 5 5.1 Listy jednokierunkowe 95 w tej książce dla uproszczenia operuje się głównie wartościami tyALG 9 5.1. Listy jednokierunkowe 99 stawałby się on wówczas automatycznie głową listy i musiałby zosALG1 5.1 Listy jednokierunkowe 101 5.1 Listy jednokierunkowe 101 ELEMENT Aprzed=NULL,*po=inf.głowa;ALG3 5.1 Listy jednokierunkowe 103 noprawny obiekt - może aktywować dowolną metodę swojej klasy, czALG5 5.1 Listy jednokierunkowe 105 Na rysunku 5-7 możemy przykładowo prześledzić jak powinna być wyALG9 5,1. Listy jednokierunkowe 109 Poruszony powyżej problem był na tyle charakterystyczny dla wieALG1 5.1. Listy jednokierunkowe 111 i zarobków. (Rozbudowa tych struktur danych nie wniosłaby konceALG3 5.1 Listy jednokierunkowe 113 int wzor(int x,int(*fun)(int!) [ return fun(x); ) void main(} iALG5 5.1. Listy jednokierunkowe 115 I res->gIowa=przed; res->oqon=pos; return (ras) ; } 1 •ALG1 5.1 Listy jednokierunkowe 121 } cout << "ALG7 5.2. Tablicowa implementacja list 1275.2.3.Listy innych typów Listy jednokierunkowe są bardzoZrozumiec Assembler2 40 Zrozumieć Asembler1.6.1 Kolumny i przeniesienia Mając już wprawę w dodawaniALG7 2.4. Niebezpieczeństwa rekurencji 37 return (x-10); else return MacCarthy(MacCarthy(x111}); 1ALG 4 94 Rozdział 5. Struktury danych5.1. Listy jednokierunkowe Lista jednokierunkowa jest oszczędnąALG8 108__Rozdział 5. Struktury danych5.1.3.Listy jednokierunkowe - teoria i rzeczywistość Oprócz pALG 8 278 Rozdziału, Algorytmy numeryczne Mając macierz w takiej postaci, można już pokusić się o wywięcej podobnych podstron