Linked List
Linked List juga disebut sebagai one-way list, adalah koleksi linier dari elemen data yang disebut simpul atau node. cara untuk melinierkannya adalah dengan menggunakan penunjuk atau pointer. Setiap node terdiri dari dua bagian, yaitu : 1. bagian yang menyimpan data(Info) 2. bagian yang berisi alamat pointer penghubung(Link). link inilah yang menghubungkan satu elemen data dengan elemen data lainnya.
Linked List
Contoh Penerapan Linked list Dasar uses crt; type PSimpul= ^TSimpul; TSimpul = record indeks:integer; berikut: PSimpul; end; var akar,simpul: PSimpul; function sisipSimpul(mSimpul: PSimpul;mElement: integer ):PSimpul; var tmpSimpul: PSimpul; begin new(tmpSimpul); tmpSimpul^.indeks := mElement; tmpsimpul^.berikut:= nil; if msimpul <> nil then begin if msimpul^.berikut <> nil then begin tmpsimpul^.berikut := msimpul^.berikut; msimpul^.berikut := tmpsimpul; end else msimpul^.berikut := tmpsimpul; end; sisipSimpul:= tmpSimpul; end; procedure hapusSimpul(msimpul:Psimpul; indeks:integer); var p,next,prev:PSimpul;i:integer; begin
i= 0;
Linked List
p := msimpul; while p <> nil do begin next:= p^.berikut; inc(i); if i = indeks-1 then begin prev := p; p := next; next := p^.berikut; dispose(p); prev^.berikut := next; end; p:= next; end; end; procedure Cetak(mSimpul:PSimpul); begin if mSimpul = nil then writeln('List Kosong') else begin while msimpul <> nil do begin writeln(msimpul^.indeks); msimpul := msimpul^.berikut; end; end; end;
Linked List
function getIndeks(msimpul:PSimpul;mIndeks: integer):PSimpul; var i: integer; p,next: Psimpul; begin i:=0; p:= mSimpul; while p <> nil do begin inc(i); next:=p^.berikut; if i = mindeks then begin getindeks := p; break; end; p := next; end; end; procedure hapusPointer; var p,next:PSimpul; begin
Linked List
p := akar; while p <> nil do begin next := p^.berikut; dispose(p); p:=next; end; end; var i,j, element: integer; begin clrscr; write('masukan jumlah elemen :'); readln(j); for i:= 0 to j-1 do begin write('Masukan elemen ke-',i,' :'); readln(element); simpul := sisipSimpul(simpul,element); if akar = nil then akar := simpul; end;
Linked List
cetak(akar); write('Pilih baris yang akan disisipkan : '); readln(j); simpul := getindeks(akar,j); write('Masukan Nilai yang akan disisipkan :'); readln(j); simpul := sisipSimpul(simpul, j); cetak(akar); write('Pilih baris simpul yang akan dihapus : '); readln(j); hapussimpul(akar,j); cetak(akar); hapusPointer; readln; end.
Queue atau antrian adalah suatu bentuk khusus dari list linier dengan operasi penyisipan hanya diperbolehkan pada satu sisi saja yang disebut sisi belakang (REAR), sedangkan operasi penghapusan hanya boleh pada sisi lainnya yang disebut sisi depan (FRONT). Deklarasi QUEUE atau antrian Deklarasi antrian const max_elemen=100; type TQueue = array[1..max_elemen] of integer; var antrian:Tqueue; depan, belakang:integer;
uses crt; const Max_Elemen=10; type TAntri = array[1..max_elemen] of char; var head,tail,pilih: byte; antri:TAntri; masukan:char; procedure init; var i: byte; begin head:=0; tail:=0; for i:=1 to max_elemen do antri[i]:='-'; end; function Kosong: boolean; begin kosong:=(tail=0); end; function penuh: boolean; begin penuh:=(tail=max_elemen); end;
procedure tambahElemen(elemen:char); begin if not penuh then begin if kosong then begin head:=1; tail:=1; end else inc(tail); antri[tail]:= elemen; end; end; function keluarkan:char; var i: byte; begin if not kosong then begin if tail=1 then begin antri[tail]:='-'; tail:= 0; head:=0; end else begin keluarkan:=antri[head]; for i:=head to tail-1 do begin antri[i]:= antri[i+1]; end; dec(tail); end; if not kosong then antri[tail+1]:='-' else antri[tail]:='-'; end; end;
procedure tampilkan; var i:byte; begin gotoxy(10,8); writeln(' ':20); gotoxy(10,8); for i:= 1 to 10 do write('|',antri[i]:3); write('|'); end; begin clrscr; init; begin writeln('1-Masukan Antrian'); writeln('2-Keluarkan Antrian'); writeln('0-Keluar'); while not pilih <> 0 do begin gotoxy(1,4); write(' ':30);gotoxy(1,4); write('Pilihan anda?'); readln(pilih); case pilih of
1: begin if not penuh then begin gotoxy(30,4); write('Masukan karakter:'); readln(masukan); tambahElemen(masukan);tampilkan; end else begin gotoxy(30,4); write('antrian penuh'); readln; end; end; 2: begin if not kosong then begin gotoxy(30,4); write(keluarkan,' telah dikeluarkan'); readln;tampilkan; end else begin gotoxy(30,4); write('Upss! Kosong'); readln; end; end; 0:exit; end; gotoxy(30,4);writeln(' ':30); end; end; end.