480 likes | 877 Views
Linked List. Struktur Berkait. Salah satu struktur berkait adalah yang disebut sebagai Linier Linked List Selain itu dikenal pula beberapa struktur berkait yang lain seperti: Linked-Stack, Linked-Queue, Double Linked-List, Linked-Generalize List dan sebagainya. Struktur Berkait.
E N D
Struktur Berkait Salah satu struktur berkait adalah yang disebut sebagai Linier Linked List Selain itu dikenal pula beberapa struktur berkait yang lain seperti: Linked-Stack, Linked-Queue, Double Linked-List, Linked-Generalize List dan sebagainya
Struktur Berkait Linked List adalah okleksi linier dari elemen data yang disebut simpul atau node. Cara melinierkan urutan adalah dengan menggunakan penuding atau pointer. Setiap simpul terdiri atas 2 bagian: Bagian pertama berisi informasi data Bagian kedua berisi link atau nextpointer
Struktur Berkait Link ini berisi alamat dari simpul berikutnya dalam list. Link ini bernilai 0 bila link tersebut tidak menunjuk ke simpul lainnya. Penunjuk ini disebut penunjuk nol. Linked list juga mengandung variabel penuding list, yang biasanya disebut START yang berisi alamat pertama dari list.
Struktur Berkait START Hal khusus dapat terjadi dimana list tidak mengandung sebuah simpulpun. List seperti ini disebut list hampa. Pada kondisi ini penuding START bernilai 0
Struktur Berkait CONTOH Bed No. Patient Next 1 Kirk 7 START 2 5 3 Dean 11 4 Maxwell 12 5 Adams 3 6 7 Lane 4 8 Green 1 9 Samuels 0 10 11 Fields 8 12 Nelson 9
Penyajian Linked List Dalam Memori Jika tidak disebutkan lain, maka penyajian linked list adalah sebagai berikut: INFO(K) menyajikan informasi LINK(K) menyajikan field next pointer START menyimpan alamat awal dari list
LINK INFO Contoh 1 2 3 O 6 START 9 4 T 0 START =9 = INFO(9) = N LINK(9) =3 = INFO(3) = O LINK(3) =6 = INFO(6) = blank LINK(6) =11= INFO(11)= E LINK(11)=7 = INFO(7) = X LINK(7) =10= INFO(10)= I LINK(10)=4 = INFO(4) = T LINK(4) =0 = akhir list 5 6 11 7 X 10 8 9 N 3 10 I 4 11 E 7 12
Kunjungan Linked List Kunjungan Linked List disebut juga proses Traversal, dimana simpul akan dikunjungi sesuai urutan, untuk memproses setiap simpul tepat satu kali. Digunakan penunjuk PTR untuk menunjukkan simpul yang sedang diproses saat itu. LINK(PTR) adalah penunjuk simpul berikutnya. PTR = LINK(PTR)
Algoritma traversal adalahsebagaiberikut: Mula-mula PTR diberinilaiawalyaitusamadengan START Kemudianproses INFO(PTR), yaituinformasisimpulpertamadari list. Kemudianperbaharui PTR denganperintah PTR=LINK(PTR) Proses INFO(PTR), yaituinformasipadasimpulkedua
Perbaharui lagi nilai PTR untuk simpul berikutnya. • Proses traversal berakhir bilamana nilai PTR = NULL. • ALGORITMA • PTR = START • Kerjakan langkah 3 dan 4 selama PTR ≠ NULL • Proses INFO(PTR) • PTR = LINK(PTR) • Selesai
Proses yang dilakukan terhadap INFO(PTR) dapat berupa berbagai bentuk. Misalnya proses mencetak, ataupun yang lainnya. Bisa juga dibuatkan algoritma untuk menghitung banyak simpul dalamn linked list.
Pencarian (searching) dalam linked list • Misalkan sebuah linked list disajikan dalam memori seperti bahasan sebelumnya. • Sekarang diberikan informasi tertentu ITEM, diminta untuk menentukan lokasi simpul yang mengandung informasi yang sama dengan ITEM tersebut. • Ada dua cara untuk hal tersebut: • List tidak terurut • List telah terurut
Cari dalam list tidak terurut Untuk mencari dalam list tidak terurut dapat dilakukan dengan sederhana sekali, yaitu dengan melakukan proses traversal sambil setiap kali memeriksa apakah informasi pada simpul tersebut sama dengan ITEM yang dicari. Algoritma ini memerlukan dua buah pemeriksaan, yaitu memeriksa apakah sudah sampai simpul terakhir (PTR = NULL) dan apakah INFO(PTR) = ITEM dimana yang dicari ketemu.
Algortima • PTR = START • Kerjakan langkah 3 selama PTR ≠ NULL • Jika INFO(PTR) = ITEM maka • LOC = PTR • Exit • Jika INFO(PTR) ≠ ITEM maka • PTR = LINK(PTR) • 4. LOC = NULL {pencarian gagal} • 5. Selesai
Cari dalam list terurut Cara yang dilakukan hampir sama dengan cara sebelumnya. Caranya adalah dengan melakukan proses traversal, sambil setiap kali memeriksa informasi simpul tersebut. Karena list telah terurut, maka tidak perlu dilakukan pencarian samapi akhir dari list, jika INFO(PTR) > ITEM, maka pencarian boleh dihentikan.
Diperlukan dua pemeriksaan pada setiap putaran. Pertama apakah ITEM sudah besar dari INFO(PTR), yang berarti ITEM tidak terdapat dalam list. Kedua apakah ITEM = INFO(PTR), yang berarti ITEM ditemukan lokasinya.
Algoritmanya: • PTR = START • Kerjakan langkah 3 selama PTR ≠ NULL • Jika INFO(PTR) < ITEM maka • PTR = LINK(PTR) • jika INFO(PTR) = ITEM maka • LOC = PTR • Exit • jika tidak • LOC = NULL • exit • 4. LOC = NULL {pencarian gagal} • 5. Selesai
Alokasi Memori Untuk menyimpan linked list dalam memori dibutuhkan suatu mekanisme untuk menyediakan memori bagi simpul baru atau mengelola memori yang sementara ini tidak berguna karena adanya penghapusan, untuk sewaktu-waktu dapat dipakai lagi. Untuk hal itu biasanya dibuatkan sebuah list khusus yang berisi sel memori yang tidak digunakan.
List ini disebut list dari ruang yang tersedia atau free-storage list atau free-pool. List ini mempunyai sebuah menunjuk tersediri yang merupakan sebuah larik AVAIL, sehingga list ini juga sering disebut list AVAIL. Contoh: Pada linked list berikut, perhatikan bahwa BED(10) merupakan tempat tidur pertama yang tersedia, BED(2) merupakan tempat tidur berikutnya.
1 2 3 4 5 6 7 8 9 10 11 12 Kirk 7 6 START Dean 11 5 Maxwell 12 Adams 3 0 AVAIL Lane 4 10 Green 1 Samuel 0 2 Fields 8 Nelson 9
Koleksi Sampah Setelah penghapusan sebuah simpul linked list, terdapat ruang memori yang bebas (tidak terpakai). Diinginkan ruang memori tersebut dapat digunakan lagi. Salah satu alternatif metode dengan Sistem Operasi yang secara priodik mengumpulkan semua ruang memori hasil penghapusan simpul dan memasukkannya ke ruang bebas. MEtode ini dikenal dengan Koleksi Sampah atau Garbage Collection.
Penyisipan Simpul ke dalam Linked List Pada gambar telihat bahwa akan disisipkan sebuah simpul baru N antara simpul A dan simpul B. Simpul A sekarang menunjuk ke simpul N dan simpul N menunjuk ke simpul yang tadi titunjuk oleh simpul A yaitu simpul B.
Pada gambar berikutnya terlihat bahwa simpul N diambil dari list AVAIL. • Penunjuk simpul berubah sebagai berikut: • Field next pointer dari simpul A, sekarang menunjuk ke simpul N, sebelumnya simpul ini ditunjuk oleh AVAIL. • AVAIL sekarang menunjuk ke simpul kedua di ruiang-bebas dimana sebelumnya simpul N menunjuk. • Field nextpointer dari simpul N, sekarang menunjuk simpul B, yang tadinya dituding oleh simpul A.
Di sini juga terdapat dua kasus khusus, yakni simpul baru N adalah simpul pertama dalam list, maka START akan menunjuk ke N, dan jika simpul N adalah simpul terakhir dalam list, N field nextpointer-nya akan berisi null.
Penyisipan pada bagian awal linked list • ALGORITMA : INSFIRST • Jika AVAIL=NULL maka tulis OVERFLOW dan exit • 2. {Memindahkan simpul pertama dari AVAIL} • NEW=AVAIL dan AVAIL=LINK(AVAIL) • 3. {Menyalin data baru ke simpul baru} • INFO(NEW)=ITEM • 4. LINK(NEW)=START • 5. START=NEW • 6. EXIT
Penyisipan pada lokasi tertentu • Jika LOC=NULL maka penyisipan dilakukan di awal seperti algoritma sebelumnya • ALGORITMA : INSLOC (ITEM,LOC) • Jika AVAIL=NULL, maka OVERFLOW • NEW=AVAIL • AVAIL=LINK(AVAIL) • 3. INFO(NEW)=ITEM • 4. Jika LOC=NULL, maka LINK(NEW)=START • START=NEW • Jika tidak, maka LINK(NEW)=LINK(LOC) • LINK(LOC)=NEW • 5. EXIT
Penyisipan pada linked list terurut Misalkan ITEM akan disisipkan ke dalam linked list terurut. ITEM harus disisipkan di antara simpul A dan simpul B sehingga: INFO(A) < ITEM < INFO(B) Untuk hal ini sebelum melakukan penyisipan harus dilakukan traversal untuk mendapatkan lokasi simpul terakhir yang nilainya kurang dari ITEM.
Dalam melakukan traversal digunakan penunjuk PTR dan bandingkan ITEM dengan INFO(PTR). Selama traversal harus disimpan jejak lokasi simpul sebelumnya dengan menggunakan variabel SAVE. Untuk hal tersebut digunakan statement SAVE=PTR dan PTR=LINK(PTR) Traversal dilanjutkan selama INFO(PTR) < ITEM.
ALGORITMA : FIND (ITEM) • Jika START=NULL, maka LOC=NULL,dan EXIT • Jika ITEM<INFO(START),maka LOC=NULL dan EXIT • SAVE=START, PTR=LINK(START) • Ulangi langkah 5 dan 6 selama PTR<>NULL • Jika ITEM<INFO(PTR) maka: • LOC=SAVE • EXIT • 6. SAVE=PTR • PTR=LINK(PTR) • 7. LOC=SAVE • 8 EXIT
ALGORITMA : INSSORT • Panggil FIND (ITEM) • Panggil INSLOC (ITEM,LOC) • EXIT
Penghapusan Simpul Penghapusan Simpul 1. Simpul pertama TIdak perlu dilakukan proses traversal karena simpul yang kan dihapus jelas setelah START. Diperlukan variabel FIRST untuk menyimpan lokasi simpul pertama yang akan dihapus.
Penghapusan Simpul Penghapusan Simpul ALGORITMA : DELFIRST • Jika START=NULL, maka overflow • FIRST=START START=LINK(START) LINK(FIRST)=AVAIL AVAIL=FIRST • EXIT
Penghapusan Simpul Penghapusan Simpul 2. Simpul simpul yang diketahui Dilakukan proses traversal untuk mendapatkan lokasi simpul yang akan dihapus. Diperlukan LOCP untuk mencatat lokasi simpul yang mendahului simpul yang akan dihapus.
Penghapusan Simpul Penghapusan Simpul ALGORITMA : SEARCH(LOC) • PTR=START • Ulangi langkah 3 sampai PTR=LOC • LOCP=PTR PTR=LINK(PTR) • EXIT
Penghapusan Simpul Penghapusan Simpul ALGORITMA : DELLOC(LOC) • Panggil SEARCH • Jika LOC=NULL, maka lokasi tidak ketemu,EXIT • LINK(LOCP)=LINK(LOC) • LINK(LOC)=AVAIL AVAIL=LOC • EXIT
Penghapusan Simpul Penghapusan Simpul 3. Simpul terakhir 1. telusuri linked list sehingga mendapatkan elemen terakhir. 2. elemen sebelum elemen terakhir menjadi null.
Penghapusan Simpul Penghapusan Simpul ALGORITMA : DELLAST PTR=START • Ulangi langkah 3 hingga PTR=NULL • LOCP=PTR PTR=LINK(PTR) • LINK(LOCP)=NULL • LINK(PTR)=AVAIL AVAIL=PTR • EXIT
Jenis LinkedList Jenis LinkedList 1. Header Linked List 2. Two Way Linked List 3. Two Way Header Linked List 4. One Way PriorityLinked List
Header LinkedList HeaderLinkedList Sebuah linked list yang salah satu simpulnya (node) berisikan catatan khusus dan berada di awal dari list (daftar).
Header LinkedList HeaderLinkedList Terdiri dari 2 jenis : 1. Grounded Header Linked List Header linked list yang simpul terakhirnya berisi null pointer.
HeaderLinkedList HeaderLinkedList 2. Circular Header Linked List Header linked list yang simpul terakhirnya menunjuk kembali ke simpul awal (node header).
Two WayLinkedList Two Way LinkedList Linked list yang setiap simpul dibagi atas 3 bagian utama. 1. bagian nilai data (info). 2.link ke alamat elemen sebelumnya (back). 3.link ke alamat elemen berikutnya (next).
Two WayLinkedList Two Way LinkedList Aturan : lokasi berikutnya dari simpul A adalah lokasi simpul B, jika dan hanya jika, lokasi sebelumnya dari simpul B adalah lokasi simpul A.
Two WayHeader LinkedList Two Way Header LinkedList Sebuah two way linked list dimana simpul (node) awalnya berisikan catatan khusus dan berada di awal dari list (daftar).
Two WayHeader LinkedList Two Way Header LinkedList • Grounded Two Way Header Linked List • Circular Two Way Header Linked List
One WayPriority LinkedList One Way Priority LinkedList Linked list yang menunjukkan ke simpul (node) berikutnya berdasarkan tingkat prioritasnya.