Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

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

Presentasi serupa


Presentasi berjudul: "Struktur Data M. Haviz Irfani, S.Si LINKED LIST."— Transcript presentasi:

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 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 Ilustrasi list yg berisi Daftar Belanja :
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 Perbedaan list dan array
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 Linked list (senarai berantai/one way list) :
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 Medan penyambung/ alamat data selanjutnya
KONSEP LIST Medan informasi/data awal A B C D E F Medan penyambung/ alamat data selanjutnya Gambar list DAFTAR dg 6 simpul 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). M. Haviz Irfani, S.Si

10 Bagaimana senarai berantai (linked list) disimpan dlm pengingat utama.
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 M. Haviz Irfani, S.Si info sambungan 1 C 5 A 6 D 10 B 1 F
E 8 awal 2 2 3 4 5 6 7 8 habis 9 10 M. Haviz Irfani, S.Si

13 Penjelasan gambar KONSEP LIST M. Haviz Irfani, S.Si
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 M. Haviz Irfani, S.Si Nama Nomor Nilai Sex Sambungan
1 Toto Arman 12345 84 / 85 L 9 Dodianto 6745 86 / 87 6 Sumanto 7001 85 / 86 Lilis Maryam 12123 83 / 84 P 11 Dartok 6501 13 Nunung 12211 5 Iyem Lestari 12111 Setur 12432 1 Kikin 7201 4 2 TEKNIK 3 7 4 5 6 EKONOMI 7 2 8 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 Awal,Akhir,Baru : simpul;
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 write('masukkan banyak data ??');readln(n); for i:= 1 to n do
OPERASI LIST CONTOH 1 : begin clrscr; write('masukkan banyak data ??');readln(n); for i:= 1 to n do write('masukkan sembarang string ke-',i,' :'); readln(items); input_data(items); end; readkey; end. M. Haviz Irfani, S.Si

20 OPERASI LIST Contoh 2 : M. Haviz Irfani, S.Si
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 : M. Haviz Irfani, S.Si
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 : M. Haviz Irfani, S.Si begin clrscr;
write('masukkan banyak data ??');readln(n); for i:= 1 to n do write('masukkan sembarang string ke-',i,' :') ;readln(items); input_data(items,i,baru1); end; writeln('=======cetak senarai======'); 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 Menambah dibelakang : OPERASI LIST
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 A B C D F (a) awal akhir baru A B C D F (b) awal akhir baru A B C D F (c) M. Haviz Irfani, S.Si

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

26 OPERASI LIST Contoh 3 : M. Haviz Irfani, S.Si
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 OPERASI LIST Contoh 3 : M. Haviz Irfani, S.Si
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 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 : M. Haviz Irfani, S.Si
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 : M. Haviz Irfani, S.Si {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 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 : M. Haviz Irfani, S.Si
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 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 : M. Haviz Irfani, S.Si
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); 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 B C D E (a) baru awal akhir A B C D E (b) awal awal akhir A B C D 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 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. awal bantu akhir Baru A B D F C (a) awal bantu akhir Baru A B D F C (b) awal bantu Baru akhir A B C D F (c) M. Haviz Irfani, S.Si

36 OPERASI LIST M. Haviz Irfani, S.Si
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 M. Haviz Irfani, S.Si 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') cek_bilangan:= valid; M. Haviz Irfani, S.Si

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

39 OPERASI LIST M. Haviz Irfani, S.Si
procedure Buat_list(var list:simpul;bil: string); var i,j,kode:integer;baru:simpul; begin for i:= 1 to length(bil) do 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) M. Haviz Irfani, S.Si

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


Download ppt "Struktur Data M. Haviz Irfani, S.Si LINKED LIST."

Presentasi serupa


Iklan oleh Google