Senaraiberantai

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\defl

ang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 020206030504
05020304}Times New Roman;}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f36\f
swiss\fcharset0\fprq2{\*\panose 00000000000000000000}Verdana;}{\f37\froman\fchar
set238\fprq2 Times New Roman CE;}{\f38\froman\fcharset204\fprq2 Times New Roman
Cyr;}
{\f40\froman\fcharset161\fprq2 Times New Roman Greek;}{\f41\froman\fcharset162\f
prq2 Times New Roman Tur;}{\f42\froman\fcharset177\fprq2 Times New Roman (Hebrew
);}{\f43\froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f44\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f45\froman\fcharset163\
fprq2 Times New Roman (Vietnamese);}{\f57\fmodern\fcharset238\fprq1 Courier New
CE;}{\f58\fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f60\fmodern\fcharset161\fprq1 Courier New Greek;}{\f61\fmodern\fcharset162\fpr
q1 Courier New Tur;}{\f62\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f63\
fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f64\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f65\fmodern\fcharset163\fp
rq1 Courier New (Vietnamese);}{\f397\fswiss\fcharset238\fprq2 Verdana CE;}{\f398
\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f400\fswiss\fcharset161\fprq2 Verdana G
reek;}
{\f401\fswiss\fcharset162\fprq2 Verdana Tur;}{\f404\fswiss\fcharset186\fprq2 Ver
dana Baltic;}{\f405\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}}{\colortbl;\
red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blu
e0;
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green
255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\re
d128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128
\blue128;
\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\fa
auto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\lang
fenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;
}{\*
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\tr
paddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbr
drr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\
lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal T
able;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid4014650\rsid
10056537
\rsid16261063}{\*\generator Microsoft Word 11.0.5604;}{\info{\author lab1-d3koms
i}{\operator lab1-d3komsi}{\creatim\yr2008\mo4\dy29\hr12\min14}{\revtim\yr2008\m
o4\dy30\hr9\min31}{\printim\yr2008\mo4\dy30\hr9\min27}{\version4}{\edmins5}{\nof
pages3}
{\nofwords715}{\nofchars4080}{\*\company ugm}{\nofcharsws4786}{\vern24689}}\wido
wctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyph
caps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvsh
ow3
\jcompress\viewkind1\viewscale100\nolnhtadjtbl\rsidroot4014650 \fet0\sectd \line
x0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxt
a .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3
\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pn
indent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\p
ntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (
}{\pntxta )}}
{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnse
clvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\p
nlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain
\qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 \fs24\lang1033\langfe10
33\cgrid\langnp1033\langfenp1033 {\b\f36\fs20\insrsid16261063 }{\b\f36\fs20\ins
rsid10056537 SENARAI BERANTAI ( LINKED LIST )

\par }{\b\f36\fs18\insrsid10056537
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36
\fs18\insrsid10056537 Cara lain untuk menyimpan sekumpulan data selain dengan me
nggunakan record adalah
dengan menggunakan bantuan tipe data pointer. Dalam hal ini, masing-masing data
dengan sebuah medan yang bertipe pointer perlu digunakan.
\par Salah satu struktur data dinamis yang paling sederhana adalah }{\b\f36\fs18
\insrsid10056537 Senarai Berantai}{\f36\fs18\insrsid10056537 (Linked List). Yai
tu kumpulan komponen
(node) yang disusun secara berurutan dengan menggunakan bantuan pointer. Node i
ni terbagi menjadi dua bagian yaitu bagian }{\i\f36\fs18\insrsid10056537 medan i
nformasi}{\f36\fs18\insrsid10056537
, yang berisi informasi yang akan disimpan atau diolah dan bagian }{\i\f36\fs18\
insrsid10056537 penyambung }{\f36\fs18\insrsid10056537 (link field), yang berisi
alamat simpul selanjutnya.
\par }\pard \qj \fi1440\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f3
6\fs18\insrsid10056537
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f36\fs1
8\insrsid10056537 Operasi Pada Senarai Berantai :
\par }{\b\f36\fs18\ul\insrsid10056537
\par }{\b\f36\fs18\insrsid10056537 Inisialisasi, yakni mengisi variabel senarai
berantai.
\par }{\f36\fs18\insrsid10056537 Misalnya digunakan deklarasi sebagai berikut
\par }{\f2\fs18\insrsid10056537 type
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 TipeData = integer ;
\par TipeSenarai = \'88RecordSenarai ;
\par RecordSenarai = record
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 data : integer ;
\par next : TipeSenarai ;
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 end;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 var
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 senaraiku : TipeSenarai ;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36\fs18\
insrsid10056537
\par Contoh prosedur inisialisasi
\par }{\f2\fs18\insrsid10056537 procedure inisialisasi (var senarai : TipeSenara
i ) ;
\par begin
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 senarai := NIL;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 end;
\par }{\f36\fs18\insrsid10056537
\par }{\b\f36\fs18\insrsid10056537 Menambah simpul baru pada ekor.
\par }{\f36\fs18\insrsid10056537 Contoh prosedurnya
\par }{\f2\fs18\insrsid10056537 procedure tambahSimpul (baru : TipeData ; var se
narai : TipeSenarai ) ;
\par var
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 pBaru, ekor: TipeSenarai;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 begin
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 ekor := senarai;
\par

\par if ekor <> NIL then


\par begin
\par
new(pBaru);
\par
pBaru^.data := baru;
\par
pBaru^.next := nil;
\par
\par
while ekor^.next <> NIL do
\par
ekor := ekor^.next ;
\par
\par
ekor^.next := pBaru;
\par end
\par else
\par begin
\par
new(senarai) ;
\par
senarai^.data := baru;
\par
senarai^.next := nil;
\par end;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 end;
\par
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36
\fs18\insrsid10056537 Sewaktu menambah atau menghapus suatu
simpul, pointer yang simpul tersebut haruslah telah dipegang. Dalam one way-lis
t biasanya yang perlu dipegang adalah pointer sebelum simpul tersebut.
\par Ide penambahan simpul dalam prosedur tambahSimpul di atas adalah memeriksa
ekor apakah bernilai NIL. Jika
tidak, berarti senarai yang akan ditambah simpulnya berada pada keadaan inisial
isasi (masih kosong), sedangkan jika ya, berarti senarai tersebut tidak lagi kos
ong.
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36\fs18\
insrsid10056537 Jika senarai tersebut tidak kosong, maka dicari letak ekornya (d
engan memeriksa apakah simpul setelah simpul yang diamati bernilai NIL).
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36
\fs18\insrsid10056537
Setelah itu dibangun simpul baru dan digandengkan ke senarai. Sekarang ekor sena
rai tersebut adalah simpul baru yang belum menunjuk apapun sedangkan jika tidak
kosong, maka cukup bangun sebuah simpul sebagai ek
or. Setelah itu isi field data ekor dengan data baru dan field next-nya dengan N
IL.
\par
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\b\f36\fs1
8\insrsid10056537 Menyisipkan simpul baru.
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36
\fs18\insrsid10056537 Jika urutan data yang disimpan tidak dipermasalahkan maka
prosedur tambahNode() di atas sudah mencukupi untuk menyimpan data. Namun jika u
rutan d
ata menjadi penting (misalnya terurut ascending) maka prosedur penyisipan data p
ada lokasi yang tepat menjadi diperlukan
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36\fs18\
insrsid10056537 Contoh prosedurnya
\par }{\f2\fs18\insrsid10056537 procedure sisipSimpul ( baru : TipeData ; var se
narai : TipeSenarai ) ;
\par var p , pBaru : TipeSenarai ;
\par begin
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 if senarai = NIL then
\par begin
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 new(senarai) ;
\par senarai\'88.data := baru ;

\par senarai\'88.next := NIL;


\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 end
\par else
\par begin
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 new(pBaru) ;
\par pBaru\'88.data := baru ;
\par pBaru\'88.next := NIL;
\par if baru < senarai\'88.data then
\par begin
\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0
{\f2\fs18\insrsid10056537 pBaru\'88.next := senarai ;
\par senarai := pBaru ;
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 end
\par else
\par begin
\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0
{\f2\fs18\insrsid10056537 p := senarai ;
\par while (p\'88.next <> NIL) and (baru > p\'88.next\'88.data ) do
\par }\pard \qj \fi720\li2160\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin2160\itap0
{\f2\fs18\insrsid10056537 p := p\'88.next ;
\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0
{\f2\fs18\insrsid10056537 pBaru\'88.next := pBaru ;
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 end;
\par }\pard \qj \li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {\f2\fs
18\insrsid10056537 end;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 end;
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36
\fs18\insrsid10056537 Dalam menyisipkan simpul baru ada tiga kemungkinan
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36\fs18\
insrsid10056537 i. Senarai dalam keadaan kosong \emdash buat simpul baru
\par ii. Sisip di depan \emdash arahkan \lquote next\rquote simpul baru ke sen
arai lalu belokkan senarai ke simpul baru.
\par iii. Sisip di tangah/belakang \emdash dapatkan simpul yang tepat sebelum s
impul baru akan disisipkan, lalu arahkan \lquote next\rquote simpul baru ke \lq
uote next\rquote simpul tersebut kemudian arahkan \lquote next\rquote simpul t
ers
ebut ke pointer baru.
\par
\par }{\b\f36\fs18\insrsid10056537 Menghapus simpul yang berisi data tertentu
\par }{\f36\fs18\insrsid10056537 (a) Contoh prosedurnya
\par }{\f2\fs18\insrsid10056537 procedure hapusSimpul ( data : TipeData ; var se
narai : TipeSenarai ) ;
\par var
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 p , q : TipeSenarai ;
\par d : TipeData ;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 begin
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 if senarai <> NIL then
\par begin
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 p := senarai ;
\par if senarai\'88.data = data then
\par begin

\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0


{\f2\fs18\insrsid10056537 senarai := senarai\'88.next ;
\par dispose (p);
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 end
\par else
\par begin
\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0
{\f2\fs18\insrsid10056537 while (p\'88.next <> NIL) and (p\'88.next\'88.data <>
data ) do
\par }\pard \qj \fi720\li2160\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin2160\itap0
{\f2\fs18\insrsid10056537 p := p\'88.next ;
\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0
{\f2\fs18\insrsid10056537 if p\'88.next <> NIL then
\par begin
\par }\pard \qj \fi720\li2160\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin2160\itap0
{\f2\fs18\insrsid10056537 q := p\'88.next ;
\par p\'88.next := q\'88.next ;
\par dispose (q) ;
\par }\pard \qj \fi720\li1440\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin1440\itap0
{\f2\fs18\insrsid10056537 end;
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 end;
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 end;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 end;
\par }{\f36\fs18\insrsid10056537 Ada tiga kemungkinan dalam menghapus simpul
\par }\pard \qj \fi-240\li240\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin240\itap0
{\f36\fs18\insrsid10056537 i. List kosong \emdash tidak terjadi apa-apa.
\par ii. Hapus simpul di depan \emdash pertama simpan senarai ke dalam pointer
bantu lalu arahkan list ke \lquote next\rquote senarai dan dispose pointer bant
u.
\par iii. Hapus simpul di tengah/belakang \emdash mirip dengan hapus simpul di
depan, hanya saja pointer yang digunakan berasal dari simpul lain yang memiliki
pointer ke simpul tersebut.
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36\fs18\
insrsid10056537
\par }{\b\f36\fs18\insrsid10056537 Menghapus seluruh isi senarai.
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36
\fs18\insrsid10056537 Dalam program yang baik, memori dibersihkan terlebih dahul
u sebelum
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f36\fs18\
insrsid10056537 program berhenti.
\par Contoh prosedurnya
\par }{\f2\fs18\insrsid10056537 procedure selesai (var senarai : TipeSenarai ) ;
\par var p : TipeSenarai ;
\par begin
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 while senarai <> NIL do
\par begin
\par }\pard \qj \fi720\li720\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin720\itap0 {
\f2\fs18\insrsid10056537 p := senarai ;
\par senarai := senarai\'88.next ;
\par dispose (p);
\par }\pard \qj \fi720\li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\
fs18\insrsid10056537 end;
\par }\pard \qj \li0\ri0\nowidctlpar\hyphpar0\faauto\rin0\lin0\itap0 {\f2\fs18\i
nsrsid10056537 end;}{\insrsid10056537
\par }}

You might also like