/* primer36.c - implementacija liste preko niza */ #include /* Implementacija strukture */ #define duzina 10 typedef char Element; // lista elemenata typedef int Index; // celija je indeks typedef Index Lista; // Lista je indeks (niza) Element Sadrzaj[duzina]; // Niz sadrzaja liste Index sled[duzina]={1,2,3,4,5,6,7,8,9,0}; // Niz sledecih elemenata u listi /*--------------------------------------------------------------------*/ /* 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 ) { return 0; } /*--------------------------------------------------------------------*/ Lista Dodaj( Element x, Lista a ) { Index b; b = NovaCelija(); Sadrzaj[b] = x; sled[b] = a; return b; } /*--------------------------------------------------------------------*/ Index NovaCelija(){ Index t; t = Slobodno; Slobodno = sled[Slobodno]; return t; } /*--------------------------------------------------------------------*/ Lista Izbaci( Element x, Lista a ){ Index b; if( a == 0 ) return a; if( Sadrzaj[a] == x ) { b = sled[ a ]; Oslobodi( a ); return b; } else { sled[ a ] = Izbaci( x, sled[ a ] ); return a; } } /*--------------------------------------------------------------------*/ void Oslobodi( Index a ) { Sadrzaj[ a ] = ' '; //nije neophodno, ponistava se sadrzaj celije sled[ a ] = Slobodno; Slobodno = a; }