Linked List (Struktur Untaian)dfett

download Linked List (Struktur Untaian)dfett

of 37

description

sdfd

Transcript of Linked List (Struktur Untaian)dfett

Linked List (Struktur Untaian)

Pengertian PointerPointer adalah sebuah penunjuk alamat pada memori yang digunakan untuk menyimpan data yang akan diproses.Perbedaan Array & Pointer

KriteriaArrayPointerSifatStatisDinamisUkuranPastiSesuai kebutuhanAlokasi VariabelSaat program dijalankan sampai selesaiDapat diatur sesuai kebutuhanSuatu pointer dapat menunjuk ke data bertipe elementer, terstruktur, pointer yang lain, atau tidak bertipe. Jika suatu pointer tidak menunjuk ke mana-mana, pointer itu dinamakan dangling, sedangkan bagian memori yang tidak dapat diakses karena tidak ada pointer yang menunjuk dinamakan garbage (sampah). Dalam Pascal, pointer dapat diisi dengan nilai yang berasal dari:1. NIL2. Fungsi Ptr3. Operator @4. Prosedur New dan GetMem5. Pointer yang lainReserved word NILNIL merupakan reserved word dalam Pascal, di mana pointer yang bernilai NIL dianggap tidak menunjuk alamat memori manapun.NIL biasa digambarkan dengan lambang ground.Fungsi PtrSintaks:Function Ptr(Seg, Ofs : word) : pointer;dengan Seg : segmen memori.Ofs : offset memori.Fungsi Ptr mengembalikan pointer dari segmen dan offset yang dimasukkan.Operator @Sintaks::=@;Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjukContoh program Deklarasi tipe data pointer:program deklarasi;uses crt;var p : ^integer;nilai : integer;beginclrscr;nilai:=12;p:=@nilai;writeln(p^);p^:=100;writeln(p^);writeln(nilai);readln;end.Output:12100100pembahasanPada contoh program deklarasi ini, pertama-tama dideklarasikan variabel p sebagai pointer yang bertipe integer. Dibuat sebuah variabel lagi yang diberi nama nilai dan bertipe integer. Variabel nilai diisi dengan nilai 12. Kemudian variabel p menunjuk alamat dari variabel nilai dengan operator @, sehingga variable p berisi nilai 12, dan ditampilkan outputnya di layar. Kemudian variabel p diberi nilai 100, dan secara otomatis variabel nilai juga bernilai 100 karena sudah ditunjuk oleh variabel p. Kemudian isi dari variabel p yang baru dan variabel nilai ditampilkan di layar.Contoh Manipulasi memori lewat Pointer bertipeuses wincrt;var p,q,r,s : ^string;nilai : string;beginclrscr;nilai:='ini string nilai!!!';p:=@nilai;new(q);q^:='ini isi pointer q!!!';r:=q;s^:=q^;writeln('alamat pointer p = ',seg(p^):4,':',ofs(p^):4,';isi pointer p = ',p^);writeln('alamat pointer q = ',seg(q^):4,':',ofs(q^):4,';isi pointer q = ',q^);writeln('alamat pointer r = ',seg(r^):4,':',ofs(r^):4,';isi pointer r = ',r^);writeln('alamat pointer s = ',seg(s^):4,':',ofs(s^):4,';isi pointer s = ',s^);readln;end.Output:alamat pointer p = 23327: 110; isi pointer p = ini string nilai!!!alamat pointer q = 24414: 0; isi pointer q = ini isi pointer q!!!alamat pointer r = 24414: 0; isi pointer r = ini isi pointer q!!!alamat pointer s = 0: 0; isi pointer s = ini isi pointer q!!!PembahasanPada program ini dibuat 4 variabel pointer yang bertipe string, yaitu p, q, r, s. Dan sebuah variabel dengan nama nilai yang bertipe juga string (bukan pointer). Pertama-tama variabel nilai diisi dengan nilai ini string nilai!!!. Kemudian variabel p (pointer) menunjuk alamat dari variabel nilai dengan operator @, sehingga variabel p juga berisi ini string nilai!!!. Kemudian dipesan tempat pada heap dengan prosedur New untuk variabel q. Kemudian variabel q diisi ini isi pointer q!!!. Setelah itu variabel r menunjuk alamat dari variabel q, sehingga alamat maupun isinya sama. Kemudian variabel s diisi dengan nilai dari variabel q, tapi dalam hal ini hanya nilainya saja, sedangkan alamatnya tidak.BackPengertian Linked ListLinked List atau One-Way List adalah koleksi linier dari elemen data yang disebut Simpul atau NodeSimpul atau Node adalah tempatyang disediakan pada suatu area memory tertentu untuk menyimpan data.Contoh Program9Linked List (Struktur Untaian)Terdiri dari Single Linked List (Untaian Tunggal) dan Double Linked List (Untaian Ganda)Single Linked List adalah suatu struktur data yang terdiri atas wadah untuk data (item) dan suatu penunjuk (pointer) ke elemen untaian lainnya. Null

Next Ponter Next Next Head

Suatu pointer khusus disediakan untuk menunjuk ke awal untaian head, dan di akhir untaian akan menunjuk item kosong null.ItemItemItemPenyajian Linked List dalam MemoriArray INFO(K) : Menyajikan bagian informasiArray LINK(K) : field nextpointerVariabel START : untuk menyimpan alamat dari elemen LISTPada bagian akhir dari LIST, nextpointer bernilai NULL.Implementasi Single Linked List Dengan Suatu RecordPointer:^List;Type List:record;Berbagai prosedur dalam implementasi struktur untaian adalah:initList:inisialisasi stuktrur untaian, pointer head menunjuk ke () null.insertList:memasukkan sebuah elemen baru ke dalam untaian.deleteList:menghapus satu elemen dari untaian.searchList:mencari satu elemen dalam untaian.

Menyisipkan ELemen (InsertList)

Ciptakan satu elemen baruBuatlah pointer next dari elemen baru ini menunjuk nullBila pointer head ini menunjuk null (empty), maka buatlah head yang menunjuk ke elemen baruBila pointer head tidak menunjuk null, telusuri untaian hingga elemen terakhir kemudian ubah pointer nextnya menunjuk elemen baru.

Procedure insertList (input x : item; in-out Head : pointer;)[ memasukkan satu elemen baru di untaian L ]Definisi Variabelthisptr,lastptr:pointer;Rincian Langkahif(Head)=null;then New(thisptr);thisptr.nextnull;thisptr.isi x;Head thisptr;else

Contoh programthisptr Head;lastptr Null;while (thisptr < > Null dolastptr thisptr;thisptr thisptr.next;endwhileNew(thisptr);thisptr.next null;lastptr.next thisptr;thisptr.isi x;endif.

Mencari Elemen (searchList)Prosedur pencariannya sbb:Telusuri untaian dengan memeriksa isi elemen apakah sama dengan yang dicariBila sama maka variabel found = true, bila tidak found = false

Procedure searchList (input x:item; input Head:Pointer; Output thisptr:pointer; output lastptr:pointer; output found:boolean){ mencari item x dakan suatu untaian}Definisi Variabel{Tidak ada}Rincian Langkahlastptr Null;thisptr Head;found false;while (thisptr < > Null) and (not found) doif ( x < > thisptr.isi)then lastptr thisptrthisptr thisptr.next;else found true;endifendwhile.

List data HeadMoreToSearch: falseFound : falseLocation : falseMencari Charlie dalam untaian menghasilkan found false; List data

Location

HeadMoreToSearch:Found:Mencari Lisa dalam untaian menghasilkan found true;KateLisaBeckyBillKateLisaBeckyBillMenghapus Elemen (deleteList)Proses penghapusan elemen dapat dilakukan sbb:1. Cari elemen yang akan dihapus (location, found= true2. bila ketemu maka hapus (dispose)

Procedure deleteList (in-out Head:pointer; input x:item; ouput done:boolean){ Menghapus x dari untaian}Definisi Variabelthisptr,latsptr:pointer;Rincian LangkahsearchList(Head, thisptr, lastptr, x, done);if(done)then if(lastptr=Null)then lastptr Head.next;dispose(Head);Head lastptr;else lastptr.next thisptr.next;dispose(thisptr);endifendif. List data

LocationHeadMoreToSearch: trueFound : trueApabila yang dihapus (delete) adalah Lisa, maka pointer ke Lisa dipindahkan ke Becky List data

Location

HeadMoreToSearch: trueFound: trueApabila yang dihapus (delete) adalah Kate, maka pointer ke Kate dipindahkan ke LisaKateLisaBeckyBillKateLisaBeckyBillTeknik Sisip Elemen

Sisip Depan (Insert Front), artinya menempatkan elemen baru selalu di depan. Langkahnya sbb:1. ciptakan node baru, New(node);2. pointer next node baru ini menunjuk ke elemen yang ditunjuk Head,3. node.next Head4.Isi node dengan elemen baru, node.isi x;5. pointer head ini menunjuk ke node baru, Head node;Sisip Akhir (Insert End),artinya menempatkan elemen baru selalu di belakang. Langkahnya sbb:

1. ciptakan node baru, New(node);2. Tempatkan elemen baru pada node baru, node.isi x;3. pointer node baru selalu menunjuk akhir null, node.next null;4. telusuri untaian mulai dari head hingga akhir elemen (Last)thisNode Head;Last null;while (thisNode.next < > null) doLast thisNode;thisNode thisNode.next;endwhile;5. pointer terakhir menunjuk node baru, Last.next Node;

Untaian Melingkar (Circular Linked List)Yaitu untaian tunggal yang telah dimodifikasi, dimana pointer next pada elemen terakhir yang menunjuk null diubah hingga menunjuk elemen pertama yang ditunjuk head.Karena untaian ini melingkar, maka posisi head bisa ditempatkan paling depan atau paling belakang dari keseluruhan untaian.Salah satu proses yang paling penting pada untaian ini adalah proses mencari elemen (searchClist), karena proses ini diperlukan ketika membaca suatu elemen tertentu, menyisipkan elemen dan juga menghapus elemen.Prosedur searchClist ini menggunakan 3 pointer, yaitu: 1. Head (Penunjuk Elemen Pertama), 2. Location (Penunjuk Node Yang Dibaca), Dan 3. Predloc (Penunjuk Node Sebelum Location)Procedure searchClist (Head, Item, Location, predLoc, found):1. Location Head.next;2. predLoc Head;3. found false;4. masihCari true;5. while (masihCari && ! Found) doif (item < location.isi)then masihCari false;else if (item = location.isi)then found true;else{predLoc location;location location.next;masihCari (location!= Head.next)}endif;endif;endwhile;

Prosedur insertClist ini 1. Ciptakan node bar, New(node)2. Masukkan item ke dalam isi node, node,isi item;3. if(Head !=Null)gunakan prosedur searchClist untuk mencari posisisearchClist (Head, Item, Location, predLoc, found);sisip di antara dua elemennode.next predLoc.next;predLoc.next node; if(Head.isi < item); Head node;else{untaian kosonghead node;node.next node;}endif;endif;

Prosedur deleteClist ini 1. searchClist (Head, Item, Location, predLoc, found);2. if (predLoc = location) // hanya ada satu elementhen head null;else{predLoc.next Location.next;if (location = head) //elemen terakhir dihapusthen head predLocendif;} endif;3. dispose(location);

UntaianGanda

Struktur untaian ganda (double linked list) adalah suatu untaian yang memiliki dua pointer, satu pointer menunjuk ke belakang, yaitu next dan satu pointer menunjuk ke depan yaitu back. akses pada untaian ini bersifat maju (forward) atau bersifat mundur (backward) dari posisi mana saja dalam untaian.Head adalah pointer yang menunjuk elemen pertama.Tail adalah pointer yang menunjuk elemen terakhir.

List datanull nullHead

Gambar Untaian GandaABCDTailUntaian ganda dapat didefinisikan melalui suatu record, sbb:

pointer:^Dlist;TypeDlist:record;

Procedure initDlist Output Head, Tail:pointer){menginisialisasi suatu untaian ganda}Definisi Variabel{tidak ada}Rincian LangkahHead Null;Tail Null;Penyisipan satu elemen baru ke dalam suatu untaian tidak berurut pada posisi terakhir dapat dilakukan sbb:Procedure insertDlist1. Ciptakan node baru2. Pointer next node baru menunjuk null3. Pointer back node baru menunjuk pada elemen terakhir dalam untaian ditunjuk oleh pointer tail.4.bila pointer Head menunjuk null (berarti untaian baru)

Procedure searchDlistmasihCari true;Location Head;Found false;While (masihCari &&!found) doIf (item < location.isi)Then masihCari false;Else if (item = location.isi)Then found true;Else {Location location.next;masihCari location !=Null); }Endif;Endif;Endwhile;

Ordered Double Linked List (Untaian Ganda yang telah diurutkan)

Ada 3 kejadian yang perlu diperhatikan:Menyisipkan elemen ke untaian yang masih kosong, pada posisi HeadMenyisipkan elemen pada posisi terakhir, yang ditunjuk oleh tailMenyisipkan elemen yang harus berada pada posisi antara head dan tail.

List datanull next nullHead

Gambar Proses PenyisipanABDETailCnewNode

Gambar Proses Penyisipan dengan Pointer yang telah diaturBDCnewNodelocation1234Proses Penyisipan Secara Umum, Sbb:1. Ciptakan Node Baru, New(node), Node.Next Null; Node.Back Null; Node.Isi X;2. Suatu Pointer Location Untuk Mencari Posisi, Location Head;3. Selama X Masih