Anda di halaman 1dari 27
STRUKTUR DATA Matheus S. Rumetna, S.Kom (emait ) BABV SENARAI (LIST) 5.1 Pengantar Pada bab ini, kita akan membahas tipe data abstrak (ADT ~ Absract Data Type) sesudah tumpukan dan antrian yaitu yang disebut sebagai sewatai (list). Selain itu akan dibahas operasi-operasi dasar terhadap senardi\Sedangkan implementasi senarai dalam pemrograman dapat dilakukan Yengan_ larik (array, yaitu dengan pend-indeks-an) atau dengan ménggunakan penunjuk (pointer) Materi : A. Definisi Kamus data ow Operasi-operasi Dasar Senarai v Penelusuran Senarai = Variasi Senarai 5.2 Definisi dan Representasi Senarai Senarai, mérupaKan struktur data yang terdiri atas rangkaian elemen sejenisyanig siting berhubungan atau bersifat runtunan (sequence). Setiap @lemen| datiysenarai memiliki pendahulu/predesesor dan penerusnta/suksesor (kecuali ‘elemen terakhir dari senarai atau senarai masih kosong). Contoh operasi-operasi dasar dari senarai adalah : ‘Membuat senarai kosong Menelusuri senarai Menyisipkan elemen dalam senarai Menghapus elemen dari senarai Struktur Data - Matheus 5. Rumetna, S.Kom 2 nis senarai adalah sebagai berikut. 1. Representasi senarai berurutan (dengan array dan indeks) Untuk menentukan ukuran senarai, maka perlu disimpan indeks dari clemen data terakhir (misalnya dengan variabel akhir). Senarai_ ini ‘mempunyai ciri-ciri dari array. Akhir Ukuran Maximum | | XP PS [XS Gambar 5.1 sebuah array yang menyimpan elemen seharai seéara berurutan 2, Representasi senarai berkait (dengan penunjtkipoitter) Item Penunjuk Item Penufhjulk) ‘tems Penunjuk Item Penunjuk Gyre Gambar 5.2 sebuah Senatai berkait dengan penunjuk (pointer) fs [=H Perbanditigan“antatasrepresentasi berurutan dengan representasi berkait adalah dari sB§i Waktu komputasi menunjukkan kompleksitas pemrograman selaint itu (fakter Fang penyimpanan perlu diperhitungkan juga. Contohnya dalam\répresehtasi berkait diperlukan ruang tambahan untuk mengkaitkan setiap'node (clemen senarai). Sedangkan dalam representai berurutan (dengan array)“terjadi pemborosan ruang yang terlebih dahulu disediakan tetapi kemungkinan tidak digunakan seluruhnya. Struktur Data - Matheus 5. Rumetna, S.Kom 3 5.3 Kamus Data Suatu senarai dengan satu penunjuk merupakan kumpulan data linear yang disebut node (elemen senarai). Elemen-elemen msenarai ini dikaitkan antara satu dengan yang lainnya dalam bentuk linear menggunakan penunjuk (pointer), Setiap elemen senarai dibagi menjadi dua bagian yaitu : item data dan penunjuk kepada elemen berikutnya, Untuk pembahasan selanjutnya item data disebut sebagai info dan penunuk disebut sebagai next. Info | Next ElmSenarai 5.3 Elemen dari senarai Gambar Sebelum struktur data senarai ini dapat digunakan)”harus dideklarasikan dahulu dalam kamus data, Berikutependeklarasian struktur senarai dalam kamus data: KAMUS Type tipeinfo : integer _{tergarttung.kebutuhan tipe data yang digunakan} Type ElmSenarai = record < info : tipeinfo Next “address > Type Senarai :ElmSenarai Notasi dasar, S_ : Senarai) Py. ; Peubith bertipe address (alamat) AWal(S):: menyatakan alamat elemen pertama dari senarai S fo (isi dari info) dari elemen yang beralamat P Info(P) : menyatakan fiel Next(P) : menyatakan field next dati clemen yang beralamat P Struktur Data - Matheus 5. Rumetna, S.Kom Sedangkan kondisi-kondisi senarai dapat digambarkan sebagai berikut 1, Senarai belum berisi elemen/masih kosong (0 elemen). Awal(S) bernilai Nil (Nil arau Nul adalah menyatakan bahwa nilainya “kosong” © Gambar 5.4 Senarai bernilai kosong 2. Senarai berisi | elemen. P berisi Awal(S), artinya penunjuk P menunjuk ke elemen dari Awal(S) os O- Gambar 5,5 Seffarai berisi 1 clemen 3, Senarai berisi N elémen (misalnya beirsi 3 elemen). P berisi Awal(S), artinya penunjuk Pimenunjuk ke elemen dari Awal(S) Next(X)adalah Y Next(Y) adalah Z Next(Z)adalah Nil CH + 4f Gambar 5.6 Senarai berisi N elemen Struktur Data - Matheus 5. Rumetna, S.Kom 5 5.4 Operasi-operasi Dasar Beberapa contoh operasi dasar senarai adalah 1. Cipta_Senarai : membuat senarai kosong Procedure Cipta_Senarai(output S = senaraiy Algoritma Awal(S) < Nil 2. Sisip_Awal ; menyisipkan elemen baru yang beralamat P_padd)awal senarai dress) Procedure Sisip_Awal(input/output) S : senarai, input Algoritma ‘Next(P) — Awal(S) Awal(S) — P 3. Sisip_Akhir : menyisipkan elemen) bard yang beralamat P pada akhir senarai Procedure Sisip_Akhir(inpui/output S ¢ senarai, input P : address) Kamus Akhir : address Algoritma If AWal(SY=Nilethen Awal(S),— P- Next(P)— Nil Else {kasus N elemen} Ahir — Awal(S) While Next(Akhir) # Nil do Akhir — Next(Akhir) Endwhile Next(P) — Nil Next(Akhit) —P Endif ‘{kasus 0 elemen} Struktur Data - Matheus 5. Rumetna, S.Kom 4, Hapus_Awal : menghapus elemen pada awal senarai yang disimpan pada elemen beralamat P Procedure Hapus_Awal{ input/output S: senarai, input P : address) Algoritma If Awal($) = Nil then {kasus 0 elemen} Output (‘senarai kosong’) Else {kasus tidak kosong} If Next(Awal(S)) = Nil then {kasus 1 elemen} P< Awal(S) Awal(S) — Nil Else {kasus N elemen} P <— Awal(S) ‘Awal(S) — Next(Awal(S)) Endif Endif 5. Hapus_Akhir : menghapus elémén pada.akhir senarai yang disimpan pada elemen beralamat P Procedure Hapus_AKhir(inputfoWtput\S : senarai, input P : address) Kamus Akhir, SebelunfAkhiFeaddress Algoritma {inisialisasij Akhir SAwal(S) SebelumARhir — Nil {maiiéntukan alamat terakhir} While Next(Akhir) 4 Nil do SebelumAKhir — Akhir Akhir — Next(Akhit) Endwhile P< Akhir {mengambil alamat elemen yang dihapus} If SebelumAkhir=Nil then _{kasus | elemen} ‘Awal(S) — Nil Else Next(SebelumAkhir) — Nil Endif Struktur Data - Matheus 5. Rumetna, S.Kom GH Skene] [Tan | | 7 7 + y ¥¢ ES fo T Gambar 5.7 Penunjuk ‘SebelumAkhir’, ‘Akhir’ dan P untuk proses 5.5 Penelusuran Senarai penghapusan elemen Untuk melakukan proses penelusuran terhadap ode seKurang-kurang sekali bila yang dibutuhkan adalah node (elemen sénarai) yang pertama, Untuk tujuan tersebut, dibutuhkan sebuah variabehbertipe penunjuk (misalnya diberi nama P) untuk menelusuri sebuah senarai P menelusuri aes > ‘ x fx fx. P t ‘ ox, x of x: 5 | ‘ x of x fx t ‘ X of x, 4 x »[ x, 29 YO g Gambar 5.8 proses penelusuran sebuah senarai berkait Struktur Data - Matheus 5. Rumetna, S.Kom 8 1, Skema penelusuran dengan penanganan terhadap senarai kosong procedure penelusurani (input § : senarai) kamus P : address Algoritma If Awal(S) = Nil then Output (‘Senarai Kosong’) Else P< Awal(S) Repeat Proses(P) P—Next(P) Until P= Endif 2, Skema penelusuran tanpa penanganan Kifusus'terhadap senarai kosong Procedure penclusuran2(input S : Senarai), Kamus P: address Algoritma P< Awalis) While PF Nil do Proses(P) P Type Senarai : ElmSenarai Algoritma untuk operasi senarai berkait penunjuk ganda adalah sebagai Derikut : Cipta_Senarai : membuat senarai kosong Procedure Cipta_Senarai(output Algoritma Awal(S) — Nil : senarai) 2. Sisip_Awal : menyisipkan elemen baru/yang\beralamat IT pada awal senarai Procedure Sisip_Awal(inpuoutput S : Séharai, input H: address) Algoritma If Awal(S) 4 Nil then {senarai tidak kosong} Prev(Awal(S)) oH Next(H) Awal(S) Endif Awal(S) & H 3. Sisip Akhi® mEnyisipkan clemen baru yang beralamat H pada akhir senaraiy Procedure Sisip_Akhir(input/output S senarai, imput H- address) Kamus Akhir : address ‘Algoritma If Awal(S) = Nil then {kasus 0 elemen} Awal(S) —H Else {asus N elemen} Akhir — Awal(S) While Next(Akhir) # Nil do Akhir — Next(Akhir) Endwhile Prev(H) < Akhir Next(Akhit) — H Endif Struktur Data - Matheus 5. Rumetna, S.Kom 16 4, Hapus_Awal ; menghapus clemen pada awal senarai yang disimpan pada elemen beralamat H Procedure Hapus_Awal(input/output S : senarai, output H: address) Algoritma If Awal(S) = Nil then {kasus 0 elemen} Output (‘Senarai kosong’) Else {kasus tidak kosong} H = Awal(S) If Next(Awal(S)) = Nil then {kasus 1 elemen} Awal(S) < Nil {kasus N elemen} Awal(S) — Next(Awal(S)) Prev(Awal(S)) < Nil Endif Nexi(H) < Nil Endif 5. Hapus_Akhir : menghapus‘elemen pada akhir senarai yang disimpan pada elemen beralamat H Procedure Hapus_AKhif(input/output S : senarai, output IT: address) Kamus Akhir : address Algortima {ihisialisasit ‘AkhiP.— Awal(S) Prew(Akhir) — Nil {menentukan alamat elemen terakhir} While Next(Akhir) £ Nil do Akhir — Next(Akhir) Endwhile He Akhir {mengambil alamat elemen yang dihapus} If Prev(Akhir) = Nil then {kasus 1 elemen} Awal(S) — Nil Else {kasus N elemen} Next(Prev(Akhit)) — Nil Endif Prev(Akhir) — Nil Struktur Data - Matheus 5. Rumetna, S.Kom 7 3. Senarai Berkait kepala + ekor dengan pununjuk ganda (head-tail double link list) Pada senarai tipe ini, selain terdapat kepala dan ekor yang diwakilii oleh awal dan akhir, juga terdapat dua penunjuk (pointer) pada setiap masing- masing elemen yaitu : penunjuk yang pertama akan menyimpan alamat dari elemen berikutnya (next), sedangkan penunjuk yang kedua akan menyimpan alamat elemen sebelumnya (prev). kondisi senarai berkait kepala + ekor dengan penunjuk ganda pada gambar 5.13. Senaraiflist kosong, Awal ~ Nil and Akhir ~ Nil Senaraiflist dengan N elemen Awal P 4a i Akbir O-ZED ROE TAO fe le Gambar 5.13 Senarai berkait kepald ckordengan penunjuk ganda Pada gambar 5.14 terlihat kondisi aWal dari senarai dan elemen dengan nilai data 18 dan alamat Heyéng akan dilakukan operasi : sisip_Awal, sip_Akhir, hapus_AWal dah hapus_Akhir. Awal P q T Akhir OH x) EY T=) Et Tx KO Pama LI Prev Next H 18 Gambar 5.14 Senarai kepala + ekor dengan penunjuk ganda dan elemen bemnilai 18 dengan alamat H Struktur Data - Matheus 5. Rumetna, S.Kom 18 KAMUS Type tipeinfo : integer {tergantung kebutuben tipe data yang digunakan} Type ElmSenarai = record < Prey : address, Info : tipeinfo, Next : address > Type Senarai : ElmSenarai Algoritma untuk operasi senarai berkait kepala + ekor dengan penunjuk ganda adalah sebagai berikut 1, Cipta_Senarai : membuat senarai kosong Procedure Cipta_Senarai(output Algoritma : senarai) ‘Awal(S) — Nil Akhir(S) — Nil 2. Sisip_awal : menyisipkan elemen bafthyatig beralamat H pada awal senarai Procedure Sisip_Awall input/output S= senarai, input H: address) Algoritma If Awal(S) = Nil then {kasus 0 elemen} “Awal(S) — H Akbin(S) — 11 Ele tkasus N elemen} Prev(Awal(S)) —H Next(H) — Awal(S) Awal(S) — 1 Endif 3. SisipZAkhir : menyisipkan elemen baru yang beralamat H pada akhir senarai Procedure Sisip_Ahir(inpur/output S: senarai, mput H: address) Algoritma if Awal(S) = Nil then {kasus 0 elemen} Awal(S) —H Akhir(S) — H Else {kasus N elemen} Prev(H) — Akhir Next(Akhir) — H Akhir —H Endif Struktur Data - Matheus 5. Rumetna, S.Kom 19 4, Hapus_Awal ; menghapus clemen pada awal senarai yang disimpan pada elemen beralamat H Procedure Hapus_Awal(input/output S : senarai, output H: address) Algoritma If Awal(S) = Nil then {kasus 0 elemen} Output (*Senarai kosong’) Else {kasus tidak kosong} H = Awal(S) If Next(Awal(S))= Nil then __{kasus 1 elemen}. Awal(S) — Nil Akhir(S) — Nil Else {kasus Noelemen} Awal(S) — Next(Awal(S)) Prev(Awal(S)) — Nil Endif Next(HH) — Nil Endif 5, Hapus_Akhir : menghapus elémen pada akhir senarai yang disimpan pada elemen beralamat IT Procedure Hapus_Akhix(input/output S: senarai, output H: senarai) Algoritma Hc Akhif {mengambil alamat elemen yang dihapus} If Prév(Akhir) = Nil then {kasus 1 elemen} “Awal(S) — Nil Akthir(S) — Nil Else {kasus N elemen} Next(Prev(Akhir)) — Nil Akhir — Prev(Akhir) Endif Prev(H) <— Nil 4, Senarai Berkait sirkuler (circular linked list) Suatu senarai berkait dimana node (elemen) terakhir dikaitkan dengan node (elemen) pertama. Kelebihan senarai ini adalah setiap node (elemen) dari senarai dapat dicapai dari sembarang node (elemen) yang lain. Struktur Data - Matheus 5. Rumetna, S.Kom 20 Kondisii senarai berkait sirkuler dapat dilihat pada gambar 5.15 Senaraiflist kosong, Awal = Nil Senaraislist dengan N elemen Awal = P, Next(R) = P Awal Pp 4 r Or Gambar 5.15. Senarai berkait sirkuler Pada senarai tipe ini, elemen terakhir dari senarai (akan) menunjuk pada elemen pertama yang juga ditunjuk oleh awalePada gambar 5.16 terlihat kondisi awal dari senarai dan elemen dengan nilai/data 18 dan alamat H yang akan dilakukan operasi : sisip.AWal, sisip_Akhir, hapus_Awal, dan hhapus_Akhir. Awal OH 18 Gambar 5.16 Senarai berkait sirkuler dan elemen bemnilai 18 dengan alamat H KAMUS ‘Type tipeinfo : integer {tergantung kebutuban tipe data yang diganakan} Type ElmSenarai = record < info : tipeinfo Next : address > Type Senarai : ElmSenarai Struktur Data - Matheus 5. Rumetna, S.Kom 21 Algoritma untuk operasi senarai berkait sirkuler adalah sebagai berikut : 1, Cipta_Senarai : membuat senarai kosong Procedure Cipta_Senarai(output S senarai) Algoritma Awal(S) — Nil 2. Sisip_Awal : menyisipkan elemen baru yang beralamat H pada awal senarai Procedure Sisip_Awal(input/output S : senarai, input M1: addres) Kamus Akhir : address Algoritma If Awal(S) = Nil then {kasug Oelemen} Awal(S) —H Next(H) — Awal(S) Else {kasus N elemen} Next(H) — Awal(S) Awal(S) =H Akhir “Awal(S)_finisialisasi untuk penelusuran} While Next(AkhitY# Awal(S) do Akhir — Next(Akhir) Endwhile, Next(Akhit) — Awal(S) Endif Sisip_ARhir mefiyisipkan elemen baru yang beralamat H pada akhir senarai Proceding Sisip_Akhir(input/output S: senarai, input H: address) Kamus ‘Akhir : address ‘Algoritma Af Awal(S) = Nil then (kasus 0 elemen} Awal(S) — H Next(H) — Awal(S) Else {kasus N elemen} Akhir — Awal(S) {inisialisasi untuk penelusuran} While Next(Akhit) # Awal(S) do Akhir — Next(Akhir) Endwhile Next(Akhir) — H Next(H) — Awal(S) Endif. Struktur Data - Matheus 5. Rumetna, S.Kom 22 4, Hapus_Awal ; menghapus clemen pada awal senarai yang disimpan pada elemen beralamat H Procedure Hapus_Awal(inputloutput S: senarai, output H: address) Kamus Akhir : address Algoritma If Awal(S) = Nil then {kasus 0 elemen} Output (‘Senarai kosong’) Else {(kasus tidak kosong} H+ Awal(S) If Next(Awal(S)) = Awal(S) then {kasus 1 elemen} Awal(S) — Nil Else tkasus N Uemen} Awal(S) — Next(Awal(S)) Akhir — Awal(S) While (Next(Akhir) # Awal(S) 40) Akhir — Next(ARhiz) Endwhile Next(Akhir) — Awal(S) Endif Endif 5. Hapus_Akhir : menghapus,elemen pada akhir senarai yang disimpan pada elemen beralamat H. Procedure Hapas” AKhif( input/output S: senarai, output H: address) Kamus Akbif, SebelumAKhir : address Algoritma {inisialisasi} Akhir — Awal(S) SebelumAKhir — Nil {menentukan alamat elemen terakhir} While Next(Akhir) # Awal(S) do SebelumAkhir <— Akhir Akhir — Next(Akhir) Endwhile H« Akhir {mengambil alamat elemen yang dihapus} If SebelumAkhir = Nil then {kasus 1 elemen} Avwal(S) — Nil Else {kasus N elemen} Next(SebelumAkhir) <— Awal(S) Endif Struktur Data - Matheus 5. Rumetna, S.Kom 23 5.7 Latihan 1, Diketahui sebuah senarai (list) $ berikut, alamat elemen pertama adalah 100, pernyataan yang SALAH adalah Awal O fx] 200 aly | a00 fz Info Next a, Alamat elemen Z = 400 b. Alamat elemen Y ~ 400 ¢. Next dari elemen Z = Nil = Awal(S) = 100 fe. Next(Awal(S)) = 200 2. Bila elemen yang bernilai X akansdihapus, maka algoritma yang benar adalah : Awal Info Next GH B Ac qx of P q a. Next(X) SNil b. Next(p) BNext(q); Next(q) = Nil Next(q) = Nil; Next(q) = Next(q) Next(Next(S)) = q; Next(q) = Nil Next(p) =H; Next(X) = Nil xe Struktur Data - Matheus 5. Rumetna, S.Kom 24 3. Bila clemen yang bemilai X disisipkan diawal senarai S$, maka algoritma yang benar adalah Awal Info Next © of a o| 3 ,| Next(Next(S)) = S~q; Next(q)-$ Next(q)=S;S=q Next(S) = Next(q); Next(q) = S fe, Next(q) = Nil; Next(S) = Next(q) se = 4, Bila clemen yang bemnilai X akan, diSisipkan diakhir senarai S, maka algoritma yang benar adalah Awal Info Next Or 4/8 ‘d_ Next(Next(S)) = q Next(q) =Next(S) Struktur Data - Matheus 5. Rumetna, S.Kom 25 5. Diketahui senarai seperti gambar dibawah ini, jika elemen yang beralamat H akan disisipkan di awal senarai dengan kondisi awal senarai sudah berisi N elemen, maka algoritma yang benar adalah : Avwal P 4a r Akhir OQ fx: Ax x KC) Next H 18 a, Next(H) — Awal(S); Awal(S) — H b, Awal(S) — H; Next(H) — Awal(H) ¢, Awal(S) — H; Akhir(S) — H d. Next(H) — P; Awal(S) — H e. Next(Akhir) — H; Akhir “HY 6. Diketahui senarai seperti soaltiémor 7, jika clemen yang beralamat H akan disisipkan di akhir_séftarai dengan kondisi awal senarai sudah berisi N elemen, maka algotifmalyang benar adalah : a. Next(H) © Awal(S); Awal(S) — H b. Awal(S)%* Hy Next(H) — Awal(H) c. SAwal(S)— 1; Akhir(S) — 11 NeXt(H) — P; Awal(S) — H e_ Next(Akhir) —H; Akhir — H & Struktur Data - Matheus 5. Rumetna, S.Kom 26 DAFTAR PUSTAKA Teddy Markus Zakaria, Agus Prijono, Konsep dan Implementasi Struktur Data, Informatika Bandung, 2005. Wahid, Fathul, Dasar-Dasar Algoritma dan Pemrograman. Yogyakarta : Andi, 2004. Rahardjo, Budi. Teknik Pemrograman Pascal. Bandung:Informatika, 2005. Struktur Data - Matheus 5. Rumetna, S.Kom 27

Anda mungkin juga menyukai