/* primer37.c - implementacija liste preko niza parova*/ #include /* Implementacija strukture */ #define duzina 10 typedef char Element; // lista elemenata typedef int Index; // celija je indeks typedef Index Lista; // Lista je indeks (niza) typedef struct { Element Sadrzaj; Index sled;} Celija; Celija M[ duzina ]; // Niz celija /*--------------------------------------------------------------------*/ /* Prototipovi */ Lista NapraviListu( void ); // inicijalizacija liste Lista Dodaj( Element x, Lista a ); // umetanje elementa x na pocetak liste a Lista Izbaci( Element x, Lista a ); // izbacivanje elementa x iz a Index NovaCelija( void ); // prostor za novu celiju void Oslobodi( Index a ); // oslobadjanje prostora celije a Lista a = 4; Index Slobodno = 1; void main(){ a = NapraviListu(); Dodaj( 'B', a ); Dodaj( 'X', a ); } /*--------------------------------------------------------------------*/ Lista NapraviListu( void ) { // Vraca praznu listu return 0; } /*--------------------------------------------------------------------*/ Lista Dodaj( Element x, Lista a ) { Index b; b = NovaCelija(); M[b].Sadrzaj = x; M[b].sled = a; return b; } /*--------------------------------------------------------------------*/ Lista Izbaci( Element x, Lista a ){ Index b; if( a == 0 ) return a; if( M[a].Sadrzaj == x ) { b = M[a].sled; Oslobodi( a ); return b; } else { M[a].sled = Izbaci( x, M[a].sled ); return a; } } /*--------------------------------------------------------------------*/ Index NovaCelija(){ Index t; t = Slobodno; Slobodno = M[Slobodno].sled; return t; } /*--------------------------------------------------------------------*/ void Oslobodi( Index a ) { M[a].Sadrzaj = ' '; //nije neophodno, ponistava se sadrzaj celije M[a].sled = Slobodno; Slobodno = a; }