Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

LINKED LIST Struktur Data M. Haviz Irfani, S.Si. Pendahuluan LIST adlah kumpulan objek data yg tipenya sama, tersusun dlm bentuk barisan linier berurutan,

Presentasi serupa


Presentasi berjudul: "LINKED LIST Struktur Data M. Haviz Irfani, S.Si. Pendahuluan LIST adlah kumpulan objek data yg tipenya sama, tersusun dlm bentuk barisan linier berurutan,"— Transcript presentasi:

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

2 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} KONSEP LIST M. Haviz Irfani, S.Si

3 KONSEP LIST M. Haviz Irfani, S.Si 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)

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

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

6 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. KONSEP LIST M. Haviz Irfani, S.Si

7 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. KONSEP LIST M. Haviz Irfani, S.Si

8 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). KONSEP LIST M. Haviz Irfani, S.Si

9 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). ABCE Medan informasi/data D KONSEP LIST M. Haviz Irfani, S.Si F awal Medan penyambung/ alamat data selanjutnya Gambar list DAFTAR dg 6 simpul

10 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. KONSEP LIST M. Haviz Irfani, S.Si

11 KONSEP LIST M. Haviz Irfani, S.Si 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.

12 KONSEP LIST M. Haviz Irfani, S.Si C5 A6 D10 B1 F0 E awal habis infosambungan

13 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’ KONSEP LIST M. Haviz Irfani, S.Si

14 KONSEP LIST M. Haviz Irfani, S.Si Toto Arman / 85L9 Dodianto / 87L6 Sumanto / 86L0 Lilis Maryam / 84P11 Dartok / 85L13 Nunung / 84P5 Iyem Lestari / 84P0 Setur / 85L1 Kikin / 87L NamaNomor Nilai SexSambungan 7 TEKNIK 2 EKONOMI

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

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

17 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; OPERASI LIST M. Haviz Irfani, S.Si CONTOH 1 :

18 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; OPERASI LIST M. Haviz Irfani, S.Si CONTOH 1 :

19 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. OPERASI LIST M. Haviz Irfani, S.Si CONTOH 1 :

20 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; OPERASI LIST M. Haviz Irfani, S.Si Contoh 2 :

21 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} OPERASI LIST M. Haviz Irfani, S.Si Contoh 2 :

22 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. OPERASI LIST M. Haviz Irfani, S.Si Contoh 2 :

23 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. OPERASI LIST M. Haviz Irfani, S.Si

24 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 OPERASI LIST M. Haviz Irfani, S.Si ABC D F awalakhirbaru ABC D F awalakhirbaru ABC D F awalakhirbaru (a) (b) (c)

25 Procedure Tambah_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; OPERASI LIST M. Haviz Irfani, S.Si

26 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; OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

27 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; OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

28 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; OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

29 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; OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

30 {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; OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

31 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 OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

32 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. OPERASI LIST M. Haviz Irfani, S.Si Contoh 3 :

33 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. OPERASI LIST M. Haviz Irfani, S.Si BCD E A awalakhirbaru BCDA awalakhirbaru ABC D F awal akhir E (a) (b) (c)

34 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; OPERASI LIST M. Haviz Irfani, S.Si

35 Menambah diTengah : Penambahan ini diperlukan sebuah pointer Bantu dlm 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. OPERASI LIST M. Haviz Irfani, S.Si AB C D F awalakhirbantuBaru AB C D F awalakhir bantuBaru ABC D F awal bantuBaru akhir (a) (b) (c)

36 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; OPERASI LIST M. Haviz Irfani, S.Si

37 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; OPERASI LIST M. Haviz Irfani, S.Si CONTOH PROGRAM:

38 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; OPERASI LIST M. Haviz Irfani, S.Si

39 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; OPERASI LIST M. Haviz Irfani, S.Si

40 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; OPERASI LIST M. Haviz Irfani, S.Si

41 {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. OPERASI LIST M. Haviz Irfani, S.Si

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


Download ppt "LINKED LIST Struktur Data M. Haviz Irfani, S.Si. Pendahuluan LIST adlah kumpulan objek data yg tipenya sama, tersusun dlm bentuk barisan linier berurutan,"

Presentasi serupa


Iklan oleh Google