1 / 42

LINKED LIST

Struktur Data. M. Haviz Irfani, S.Si. LINKED LIST. KONSEP LIST. Pendahuluan. LIST adlah kumpulan objek data yg tipenya sama, tersusun dlm bentuk barisan linier berurutan, dan elemen2xnya dapat dihapus atau ditambahkan secara dinamis. Kesimpulan:

tanika
Download Presentation

LINKED LIST

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Struktur Data M. Haviz Irfani, S.Si LINKED LIST

  2. KONSEP LIST Pendahuluan LIST adlah kumpulan objek data yg tipenya sama, tersusun dlm bentuk barisan linier berurutan, dan elemen2xnya dapat dihapus atau ditambahkan secara dinamis. Kesimpulan: 1. elemen2x list hrs tersusun secara berurutan {seperti elemen array} M. Haviz Irfani, S.Si

  3. KONSEP LIST 2. List dapat tidak mempunyai elemen (kosong) dan kedalamnya dpt ditambah elemen baru 3. Jika list tidak kosong, maka elemen2x list dpt jg diambil dari list (hapus) M. Haviz Irfani, S.Si

  4. KONSEP LIST Konsep List • Inisialisasi list menjadi kosong • Periksa list kosong atau tidak • Periksa list penuh atau tidak • Mencari panjang list (jml elemen list) • Pop (ambil) elemen list jk tidak kosong • Push (masukkan/mengganti) elemen list bila list tidak kosong/penuh M. Haviz Irfani, S.Si

  5. KONSEP LIST Ilustrasi list yg berisi Daftar Belanja : Mula-mula Hasil akhir Pepsodent Kain pel Rinso Sabun lux Pepsodent Kain pel Rinso Sabun LUX Sikat gigi Sabun DEO Deodoran M. Haviz Irfani, S.Si

  6. KONSEP LIST Daftar mula2x adalah hari pertama belanja, untuk hari berikutnya daftar tsb bisa berubah sesuai dg barang yg harus dibeli lg atau barang yg tdk perlu dibeli lg. Daftar kiri menunjukkan daftar belanja semula ditambah dg 3 barang lain dan menghapus 2 barang yg tidak perlu dibeli lg. M. Haviz Irfani, S.Si

  7. KONSEP LIST Perbedaan list dan array Array merupakan struktur statis (tidak dpt di push/pop) contiguous list List merupakan struktur dinamis (dapat di push/pop)  linked list Push memasukkan elemen baru/ pengganti dari list. Pop  mengambil/ menghapus elemen dari list. Implementasi list dengan pointer Pointer merupakan variabel penunjuk yg berisi alamat data. Ilustrasi: jika tukul memesan save box pd bank, tentu petugas akan menunjuk box kosong seraya memberitahu. Lalu tukul memasukkan barangnya pd save box tsb. Bila box tsb tidak muat,maka tukul akan memesan (ditunjuk lg oleh petugas) lg save box tambahan,lalu memasukkan sisa barangnya. sebelum memasukkan barangnya tentu alamat (no box) telah diketahuinya (ditunjuk) dan kosong. M. Haviz Irfani, S.Si

  8. KONSEP LIST Linked list (senarai berantai/one way list) : merupakan model list dimana elemen2x nya berurutan dan terhubung rapat oleh sebuah pointer. Masing2x elemen disebut simpul (node).simpul terbagi 2 yaitu medan informasi/data (berisi data yg disimpan/ diolah) dan medan penyambung/link field berupa pointer (berisi alamat simpul berikutnya). M. Haviz Irfani, S.Si

  9. KONSEP LIST Medan informasi/data awal Pointer awal merupakan penunjuk simpul pertama dan bukan bagian dari list. Medan penyambung yg tidak menunjuk simpul lain disebut pointer kosong dengan kata baku nil (nilainya sama dg 0 atau bilangan negatif). Dari gambar terlihat bahwa dengan sebuah pointer awal saja maka bisa membaca semua data/informasi yg tersimpan dalam senarai (list). D A B C E F Medan penyambung/ alamat data selanjutnya Gambar list DAFTAR dg 6 simpul M. Haviz Irfani, S.Si

  10. KONSEP LIST Bagaimana senarai berantai (linked list) disimpan dlm pengingat utama. Meskipun senarai dpt digambarkan secara berurutan namun tdk harus disimpan secara berurutan pula karena pointer adl alamat lokasi tertentu dlm pengingat. Penyajian senarai dlm pengingat utama sbb: DAFTAR memerlukan 2 larik linier (INFO dan SAMBUNGAN), INFO berisi elemen yg disimpan dlm medan informasi dan SAMBUNGAN berisi medan pointer (alamat) ke simpul berikutnya. M. Haviz Irfani, S.Si

  11. KONSEP LIST DAFTAR memerlukan satu variabel misal AWAL yg berisi alamat simpul pertama dari senarai berantai, dan pointer KOSONG yg menunjukkan akhir dr senarai berantai. Karena INFO dan SAMBUNGAN selalu positif dan lebih besar 0, mk pointer bisa dinyatakan sebagai KOSONG =0. M. Haviz Irfani, S.Si

  12. KONSEP LIST info sambungan 1 awal 2 2 3 4 5 6 7 habis 8 9 10 M. Haviz Irfani, S.Si

  13. KONSEP LIST Penjelasan gambar Awal = 2, maka INFO[2] = ‘A’ Sambungan[2] = 6, maka INFO[6] = ‘B’ Sambungan[6] = 1, maka INFO[1] = ‘C’ Sambungan[1] = 5, maka INFO[5] = ‘D’ Sambungan[5] = 10, maka INFO[10] = ‘E’ Sambungan[10] = 8, maka INFO[8] = ‘F’ Sambungan[8] = 0,akhir senarai berantai. Sehingga diperoleh untai ‘ABCDEF’ M. Haviz Irfani, S.Si

  14. KONSEP LIST Nama Nomor Sex Sambungan Nilai 1 2 TEKNIK 3 7 4 5 6 EKONOMI 7 8 2 9 10 11 12 13 14 M. Haviz Irfani, S.Si

  15. KONSEP LIST MAHASISWA FAKULTAS TEKNIK: NUNUNG, LILIS MARYAM,SETUR, TOTOT ARMAN, IYEM LESTARI MAHASISWA FAKULTAS EKONOMI: DODIANTO, DARTOK,KIKIN, SUMANTO M. Haviz Irfani, S.Si

  16. OPERASI LIST Deklarasi pointer : Type simpul = ^ Data; data =record info : char; berikut : simpul; end; {end record} Var elemen : char; Awal,Akhir,Baru : simpul; M. Haviz Irfani, S.Si

  17. OPERASI LIST CONTOH 1 : Program membuat_senarai_tanpa_array; uses crt; {DEKLARASI} type simpul = ^Data; data = record isi:string; sambung :simpul; end; var items:string; awal,akhir,baru :simpul; n,i:byte; M. Haviz Irfani, S.Si

  18. OPERASI LIST CONTOH 1 : Procedure input_data(items:string); var baru:simpul; begin new(baru); {buat pointer} baru^.isi :=items; writeln('data baru yg masuk dalam pointer yaitu ',baru^.isi); if awal=nil then baru^.sambung:=nil else baru^.sambung:=awal; awal:=baru; writeln;writeln; writeln('Data awal sekarang adalah ',awal^.isi); end; M. Haviz Irfani, S.Si

  19. OPERASI LIST CONTOH 1 : begin clrscr; write('masukkan banyak data ??');readln(n); for i:= 1 to n do begin write('masukkan sembarang string ke-',i,' :'); readln(items); input_data(items); end; readkey; end. M. Haviz Irfani, S.Si

  20. OPERASI LIST Contoh 2 : Program membuat_senarai_dengan_array; uses crt; {DEKLARASI} const maks=100; type indek=array[1..maks] of string; simpul = ^Data; data = record isi:array[1..maks] of string; sambung :simpul; end; var items:string; awal,akhir,baru :simpul; n,i:byte; baru1:indek; M. Haviz Irfani, S.Si

  21. OPERASI LIST Contoh 2 : Procedure input_data(items:string;j:byte;var datax:indek); begin new(baru);{buat pointer} baru^.isi[j] :=items; datax[j]:=baru^.isi[j]; writeln('data baru yg masuk dalam pointer yaitu ',baru^.isi[j]); if awal=nil then baru^.sambung:=nil else baru^.sambung:=awal; awal:=baru; writeln;writeln; writeln('Data awal sekarang adalah ',awal^.isi[j]); end; {AKHIR PROSEDUR INPUT_DATA} M. Haviz Irfani, S.Si

  22. OPERASI LIST Contoh 2 : begin clrscr; write('masukkan banyak data ??');readln(n); for i:= 1 to n do begin write('masukkan sembarang string ke-',i,' :') ;readln(items); input_data(items,i,baru1); end; writeln('=======cetak senarai======'); for i:= 1 to n do write(baru1[i],' '); readkey; {BERHENTI SEJENAK} end. M. Haviz Irfani, S.Si

  23. OPERASI LIST Menambah simpul: Merupakan operasi berdasarkan posisi simpul baru yg akan disisipkan,yaitu *simpul baru selalu ditambahkan dibelakang simpul terakhir; *simpul baru selalu diletakkan sbg simpul pertama; dan *simpul baru menyisip diantara dua simpul yg sudah ada. M. Haviz Irfani, S.Si

  24. OPERASI LIST Menambah dibelakang : Yaitu penambahan simpul baru diakhir senarai dan simpul baru selalu jd simpul terakhir. Utk menyambung simpul yg ditunjuk oleh Akhir dan baru, pointer pd simpul akhir dibuat sama dg Baru, lalu pointer Akhir dibuat sama dg pointer Baru awal akhir baru D A B C F (a) awal akhir baru D A B C F (b) awal akhir baru D A B C F (c) M. Haviz Irfani, S.Si

  25. OPERASI LIST ProcedureTambah_belakang(var awal,akhir:simpul ; elemen:char); Var baru:simpul; Begin new(baru);baru^.info :=elemen; if awal=nil then awal:= baru else akhir^.berikut := baru; {(b)} akhir:=baru; {(c)} Akhir^.berikut := nil; End; M. Haviz Irfani, S.Si

  26. OPERASI LIST Contoh 3 : Program membuat_senarai_dengan_array; uses crt; {DEKLARASI} const maks=100; type indek=array[1..maks] of string; simpul = ^Data; data = record isi:array[1..maks] of string; sambung :simpul; end; VAR items:string; awal,akhir,baru :simpul; n,i,k,m:byte; baru1:indek; komen:char; argumen:boolean; M. Haviz Irfani, S.Si

  27. OPERASI LIST Contoh 3 : Procedure inisial_awal; var k:byte; begin k:=0; awal:=nil; akhir:=nil; {pointer awal dan akhir tdk menunjuk simpul manapun} writeln('awal= ',awal^.isi[k],' akhir = ',akhir^.isi[k]) end; M. Haviz Irfani, S.Si

  28. Contoh 3 : OPERASI LIST procedure input_data(items:string;j:byte;var datax:indek); begin new(baru); {buat pointer} baru^.isi[j] :=items; {isi simpul baru menunjuk items yg baru dikirim} datax[j]:=baru^.isi[j]; {datax akan berisi isi simpul baru} writeln('data baru yg masuk dalam pointer yaitu ',baru^.isi[j]); if awal=nil then begin baru^.sambung:=nil; awal:=baru; {simpul awal menunjuk simpul baru} writeln('Data awal sekarang adalah ',awal^.isi[j]); end else baru^.sambung:=awal; {pointer menunjuk alamat baru} akhir:=baru; {simpul akhir menunjuk simpul baru juga} writeln;writeln; writeln('Data akhir sekarang adalah ',akhir^.isi[j]); end; M. Haviz Irfani, S.Si

  29. OPERASI LIST Contoh 3 : procedure tambah_belakang(var awal,akhir:simpul;m:byte;var datax:indek;var k:byte); begin new(baru); baru^.isi[m]:= items; {simpul baru menunjuk nilai yg di input } if awal=nil then awal:=baru {periksa apakah simpul kosong} else akhir^.sambung:=baru; akhir:=baru; {simpul akhir menunjuk data baru} datax[m]:=akhir^.isi[m]; {datax isinya akan dikirim} k:=m; {k indeks baru yg akan di kirim} akhir^.sambung:=nil; {pointer akhir tidak menunjuk ke simpul manapun} end; M. Haviz Irfani, S.Si

  30. OPERASI LIST Contoh 3 : {DESKRIPSI} begin clrscr; inisial_awal; {prosedur menetapkan pointer awaldan akhir tidak menunjuk ke simpul manapun} write('masukkan banyak data ??');readln(n); for i:= 1 to n do begin write('masukkan sembarang string ke-',i,' :') ;readln(items); input_data(items,i,baru1); {kirim data items agar dpt di urut dg pointer, dan ambil data baru1 agar dpt dicetak} end; M. Haviz Irfani, S.Si

  31. OPERASI LIST Contoh 3 : writeln; m:=1; argumen:=true; {inisial argumen=true agar bisa masuk dlm WHILE} while (upcase(komen)='Y') or (argumen=true) do {operator logika OR dipakai agar salah satu bernilai benar sehingga dpt masuk ke WHILE} begin write('apakah mau tambah data ??');readln(komen); if komen in ['y','Y'] then begin write('masukkan sembarang string ke-',n+m,' :') ;readln(items); tambah_belakang(awal,akhir,(m+n),baru1,k); {yang dikirim pointer awal,akhir dan indeks baru, sedangkan yg diambil untuk dicetak yaitu simpul baru1 dan indek k} end M. Haviz Irfani, S.Si

  32. OPERASI LIST Contoh 3 : else {komen tdk sama dg 'y' atau 'Y'} begin argumen:=false; {argumen=false dan komen<>'Y' maka keluar dari WHILE} writeln('=======cetak senarai======'); for i:= 1 to k do write(baru1[i],' '); end; inc(m); end; readkey; end. M. Haviz Irfani, S.Si

  33. OPERASI LIST Menambah didepan : Yaitu penambahan simpul baru diawal senarai dan simpul baru selalu jd simpul awal. Pertama kali pointer simpul yg ditunjuk oleh pointer baru dibuat sama dg awal, awal dibuat sama dg baru. Seleksi dulu apakah awal masih nil atau tidak. baru awal akhir (a) E A B C D baru awal akhir A B C D E (b) awal awal akhir D A B C F (c) M. Haviz Irfani, S.Si

  34. OPERASI LIST Procedure Tambah_Depan(var awal,akhir:simpul ; elemen:char); Var baru:simpul; Begin new(baru);baru^.info :=elemen; if awal=nil then {senarai masih kosong} awal:= baru else baru^.berikut := awal; {(b)} awal:=baru; {(c)} End; M. Haviz Irfani, S.Si

  35. OPERASI LIST Menambah diTengah : Penambahan ini diperlukan sebuah pointer Bantudlm hal ini simpul baru akan diletakkan setelah simpul yg ditunjuk oleh pouinter bantu.Pertama kali pointer simpul yg ditunjuk oleh pointer baru dibuat sama dg awal, awal dibuat sama dg Baru. awal bantu akhir Baru (a) C D A B F awal akhir bantu Baru (b) D A B F C awal akhir bantu Baru (c) D A B C F M. Haviz Irfani, S.Si

  36. OPERASI LIST Procedure Tambah_Tengah(var awal,akhir:simpul ; elemen:char); Var bantu,baru:simpul; Begin new(baru); baru^.info :=elemen; if awal=nil then {senarai masih kosong} begin awal:= baru; akhir:= baru; end else begin {mencari lokasi yg sesuai} bantu := awal; while elemen > baru^.berikut^.info do bantu := bantu^.berikut; {menyisipkan simpul baru} baru^.berikut := bantu^.berikut; {(b)} bantu^.berikut:= baru; {(c)} end; {endif} End; M. Haviz Irfani, S.Si

  37. OPERASI LIST CONTOH PROGRAM: PROGRAM LIST_BERANTAI; uses crt; const max=80; type str80 = string[max]; simpul = ^data; data = record info:char; kiri,kanan:simpul; end; var bilangan1,bilangan2,bilangan3:simpul; angka1,angka2 :str80; i:integer; lagi:char; function cek_bilangan(bil:string):boolean; var i: integer; angka :set of char; valid :boolean; begin angka:=['0'..'9']; valid:=true; for i := 1 to length(bil) do if not(bil[i] in angka) then{apakah bil tdk berada dlm himpunan['0'..'9']} begin {ada karakter yg tidak sah} valid:=false; i:= length(bil);writeln('ada karakter yang tidak sah') end; cek_bilangan:= valid; end; M. Haviz Irfani, S.Si

  38. OPERASI LIST procedure awalan(var baru:simpul); begin new(baru); with baru^ do begin info:=chr(32);{info awal berisi karakter berupa spasi} kiri:=baru; kanan:=kiri; end; end; M. Haviz Irfani, S.Si

  39. OPERASI LIST procedure Buat_list(var list:simpul;bil: string); var i,j,kode:integer;baru:simpul; begin for i:= 1 to length(bil) do begin awalan(baru); val(bil[i],j,kode);{VAL(bil[i] yaitu perkarakter dlm string, j yaitu nilai ASCII perkarakter, kode yaitu karakter kosong bernilai 0)} baru^.info:=chr(j);writeln('kode= ',kode,ord(baru^.info)); baru^.kiri:= list^.kiri; baru^.kanan:= list; list^.kiri^.kanan:= baru; list^.kiri := baru; end; list^.info := chr(length(bil)); writeln('-->',list^.info) end; M. Haviz Irfani, S.Si

  40. OPERASI LIST procedure BACA(kepala:simpul); var bantu : simpul;kode:integer; begin bantu:= kepala^.kanan; repeat kode:=ord(Bantu^.info); if kode=32 then write('') else write(kode); bantu:= bantu^.kanan; until bantu=kepala ; writeln; end; M. Haviz Irfani, S.Si

  41. OPERASI LIST {PROGRAM UTAMA} BEGIN CLRSCR; WRITELN('++++++++++++++++++++++++++++++++++++++'); WRITELN(' PENGGUNAAN POINTER PD LIST BERANTAI'); WRITELN('======================================'); WRITELN('KASUS PENJUMLAHAN 2 BIL BULAT POSITIF'); WRITELN('#######################################'); WRITELN;WRITELN; write('bilangan pertama = ');readln(angka1); write('bilangan kedua = ');readln(angka2); if( cek_bilangan(angka1)) and(cek_bilangan(angka2)) then begin writeln('kedua bilangan sah digunakan'); awalan(bilangan1);awalan(bilangan2); awalan(bilangan3); buat_list(bilangan1,angka1); buat_list(bilangan2,angka2); end else writeln('kedua bilangan tidak sah digunakan'); Baca(bilangan1);Baca(bilangan2); readkey; END. M. Haviz Irfani, S.Si

  42. OPERASI LIST ……….THE END………. M. Haviz Irfani, S.Si

More Related