|
This technique is widely used by database systems. It provides fast access to the records. Here you can find the algorithm of creating, adding, searching and erasing methods in linked list.
The Algorithm 
C Source Code { 1- Create Linked List 2- Search 3- Erase 4- Add B[] : stores input numbers. A[] : stores array PO[] 's real numbers. PO[]: Pointer array. m : size of B[]. n : size of arrays A[] and PO[]. } uses crt; var PO,A:array[0..100] of integer; B:array[1..100] of integer; n,m:integer; ch:char; Procedure giris; { reads array B[] from keyboard} var i:integer; begin write('size of array:');read(m); for i:=1 to m do read(B[i]); end; Procedure Ekle(x,k,j:integer); { Adds 'x' to Linked List } begin while (x>A[j])and(j>0) do begin k:=j; j:=PO[j]; end; n:=n+1; A[n]:=x; PO[k]:=n; PO[n]:=j; end; Procedure ekrana_yaz; { Displays the arrays A[] and PO[] to the screen } var i,k:byte; begin writeln; write(' ____Array___Pointer____ '); k:=wherey+1; for i:=0 to n do begin gotoxy(8,k+i);write(A[i]:3); gotoxy(15,k+i);write(PO[i]:3); end; end; Procedure LList_Olustur; { Creates a Linked List array from B[] } var i:integer; begin PO[0]:=1; PO[1]:=-1; A[1]:=B[1]; n:=1; for i:=2 to m do Ekle(B[i],0,PO[0]); ekrana_yaz; end; Procedure Ekle_X; { Adds a number to Linked List } var x2:integer; begin writeln; write(' Input the number to be added:');readln(x2); ekle(x2,0,PO[0]); clrscr; ekrana_yaz; end; Procedure Ara; { Searchs a number into Linked List } var j,k,x2:integer; begin writeln; write('Input the number to be searched:');readln(x2); j:=PO[0]; k:=j; while (A[j]<>x2)and(x2>0) do begin k:=j; j:=PO[j]; end; if (A[j]=x2)and(PO[j]>0) then write('Searched ',A[j],' 's place is ',j) else write('Number is not in array :-('); end; Procedure Silme; { Erases a number from Linked List} var i,j,k,x2:integer; begin writeln; write(' Input the number to be erased:');readln(x2); j:=PO[0]; k:=j; while (x2<>A[j])and(j>0) do begin k:=j; j:=PO[j]; end; if A[j]=x2 then begin writeln('Number is found and erased...'); PO[k]:=j; PO[j]:=-2; clrscr; ekrana_yaz; end else begin writeln('Number did not found...'); end; end; Procedure ana_yaz; { main procedure } begin writeln; writeln('Add <E>, Erase <S>, Search <A>...'); write('Press another key for exit...'); end; Procedure Ana; { Operation selection } begin ch:=readkey; case upcase(ch) of 'E': begin Ekle_X; ana_yaz; ana; end; 'A': begin Ara; ana_yaz; ana; end; 'S':begin Silme; ana_yaz; ana; end; #13:ana; end; end; BEGIN clrscr; giris; LList_Olustur; ana_yaz; Ana; END.
Sample Execution
size of array:6 44 56 33 14 28 41 ____Array___Pointer____ 0 4 44 2 56 -1 33 6 14 5 28 3 41 1 Add <E>, Erase <S>, Search <A>... Press another key for exit... Input the number to be added:20 ____Array___Pointer____ 0 4 44 2 56 -1 33 6 14 7 28 3 41 1 20 5 Add <E>, Erase <S>, Search <A>... Press another key for exit... ____Dizi___Pointer____ 0 4 44 2 56 -1 33 6 14 7 28 3 41 1 20 5 Add <E>, Erase <S>, Search <A>... Press another key for exit... Input the number to be erased:28 ____Array___Pointer____ 0 4 44 2 56 -1 33 6 14 7 28 -2 41 1 20 5 Add <E>, Erase <S>, Search <A>... Press another key for exit... Input the number to be searched:56 Number is not in array... Add <E>, Erase <S>, Search <A>... Press another key for exit...
|