Bab v.linked List_AP

  • Upload
    anggi28

  • View
    60

  • Download
    0

Embed Size (px)

DESCRIPTION

materi Linked list

Citation preview

Bab I - Konsep PBO

Linked List Oleh:Tim Algoritma dan PemrogramanUNIKOM

PENGERTIAN LINKED LISTberisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung-menyambung, dinamis dan tidak terbatas.Linked List sering disebut juga Senarai BerantaiLinked List saling terhubung dengan bantuan variabel pointerMasing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa record

Array vs Linked List

Bentuk Linked ListSingle Linked ListDouble Linked ListCircular Linked ListSingle Linked ListLinked list dengan simpul berisi satu link / pointer yang mengacu ke simpul berikutnyaMedan Data (Info)Medan Sambungan (next)Simpul Single Linked List : Deklarasi Linked List (Algoritma)Typenama_pointer = SimpulSimpul = Record medan_data : tipedata, medan_sambungan : NamapointerEndRecord

nama_var_pointer : nama_pointer

Contoh Deklarasi Linked ListTypePoint = DataData = Record Info : char , Next : Point Endrecordawal, akhir : Point

Operasi operasi Single Linked ListPenciptaan (create)PenyisipanPenghapusanTraversalPencarian (Searching)Pengurutan (Sorting)Penghancuran (destroy)PenciptaanPointer awal dan akhir diberi harga nil/NULL

awalakhirawal nilakhir nilPenyisipan di Depan- Jika List kosong {awal = nil}barubaru1baru1awalakhiralloc(baru)baru nilbaru.info 1awal baruakhir baruPenyisipan di Depan (lanjutan)- Jika List tidak kosong {Awal Nil}baru1akhirawal23Misalkan mula-mula keadaan List memiliki dua simpul:Satu simpul akan disisipkan di depanalloc(baru)baru.info 1Penyisipan di Depan (lanjutan)baru1awal2akhir3baru.next awalSimpul baru akan disisipkan di depan simpul yang ditunjuk oleh pointer awalPenyisipan di Depan (lanjutan)awal23baru1akhirawal baruSetelah simpul baru tersambung dengan simpul pertama dari list, lalu pindahkan pointer awal ke simpul yang baruPenyisipan di Depan (lanjutan)baru1awal23akhirKeadaan Linked List setelah terjadi penyisipan di depan/di awal:Algoritma Penyisipan di DepanProcedure SisipDepanSingle(Input elemen : tipedata, I/O awal, akhir : nama_pointer){I.S. : data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}{F.S. : menghasilkan satu simpul yang disisipkan di depan pada single linked list}Kamus :baru : nama_pointerAlgoritma :alloc(baru)baru.info elemenIf (awal = nil) Thenbaru.next nilakhir baru Elsebaru.next awalEndIfawal baruEndProcedure

Penyisipan di Belakang- Jika List kosong {awal = nil} {sama seperti pada penyisipan di depan}awal32akhirbaru1- Jika List tidak kosong {awal nil}Misalkan mula-mula List memiliki dua simpul:Simpul yang akan disisipkan:alloc(baru)baru.next nilbaru.info 1Penyisipan di Belakang (lanjutan)baru1akhirawal32akhir.next baruSimpul baru akan disisipkan setelah simpul yang ditunjuk pointer akhirPenyisipan di Belakang (lanjutan)akhir baru akhirawal32baru1Medan sambungan (next) dari simpul terakhir disambungkan ke simpul yang baru.Penyisipan di Belakang (lanjutan)awal32baru1akhirKeadaan Linked List setelah terjadi penyisipan satu simpul di belakang:Procedure SisipBelakangSingle(Input elemen : tipedata, I/O awal, akhir : nama_pointer){I.S. : data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}{F.S. : menghasilkan satu simpul yang disisipkan di belakang pada single linked list}Kamus :baru : nama_pointerAlgoritma :alloc(baru)baru.info elemenbaru.next nilIf (awal = nil) Thenawal baru Elseakhir.next baruEndIfakhir baruEndProcedure

Algoritma Penyisipan di BelakangPenyisipan di Tengahbaru1awal254akhir3Misal akan menyisipkan angka 1 setelah angka 4- Jika List kosong {awal = nil}{sama seperti pada penyisipan di depan}- Jika List tidak kosong {awal Nil}alloc(baru)baru.info 1 Penyisipan di Tengah (lanjutan)Angka 4 ditemukan dengan cara mencari mulai dari simpul pertama sampai simpul yang ada angka 4 ditemukan (metode sequential search).bantuMisalkan pointer yang mencari angka 4 adalah pointer bantu, berarti pointer bantu akan menunjuk simpul ke-2 karena simpul tersebut berisi data yang dicari.baru.next bantu.nextbaru1awal254akhir3bantuPenyisipan di Tengah (lanjutan)bantu.next baruSetelah simpul baru terhubung ke simpul setelah simpul yang ada angka 4, maka sambungkan medan sambungan (next) dari simpul yang ditunjuk pointer bantu ke simpul barubantuawal2baru14akhir35Penyisipan di Tengah (lanjutan)Keadaan Linked List setelah terjadi penyisipan satu simpul di tengah:bantubaru12akhir5awal43Procedure SisipTengahSingle(Input elemen : tipedata, I/O awal, akhir : nama_pointer){I.S. : data yang akan disisipkan (elemen), pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}{F.S. : menghasilkan satu simpul yang disisipkan di tengah pada single linked list}Kamus :baru,bantu : nama_pointerketemu : booleandatasisip : tipedataAlgoritma :If (awal = nil) Then alloc(baru) baru.info elemen baru.next nilAlgoritma Penyisipan di Tengah awal baru akhir baruElseInput(datasisip)bantu awalketemu falseWhile (not ketemu and bantu nil) do If (datasisip = bantu.info) Thenketemu true Elsebantu bantu.next EndIfEndWhileAlgoritma Penyisipan di Tengah (lanjutan)If (ketemu)Then If (bantu = akhir) Then sisip_belakang_single(elemen,awal,akhir) Else alloc(baru) baru.info elemen baru.next bantu.next bantu.next baru EndIfElse Output(Data yang akan disisipkan tidak ada);EndIfEndIfEndProcedure

Algoritma Penyisipan di Tengah (lanjutan)Penghapusan di DepanProses menghapus satu simpul di depan/di awal Linked List (menghapus simpul yang ditunjuk oleh pointer awal)- Keadaan List memiliki satu simpul {awal = akhir}awalakhir1Penghapusan di Depan (lanjutan)awalakhirphapuselemen1phapusphapus awalelemen phapus.info dealloc(phapus)awal nilakhir nil1awalakhirJika terjadi penghapusan pada Linked List yang hanya memiliki satu simpul, maka Linked List akan kosongPenghapusan di Depan (lanjutan)- Keadaan List memiliki lebih dari satu simpul {awal akhir}

awal23akhirMisalkan mula-mula Linked List memiliki dua simpul

Penghapusan di Depan (lanjutan)phapusawal23akhirelemenawal23phapusakhirphapus awalelemen phapus.info awal awal.nextdealloc(phapus)Penghapusan di Depan (lanjutan)Keadaan Linked List setelah terjadi penghapusan di depan/di awalphapusawal3akhir2Algoritma Penghapusan di DepanProcedure HapusDepanSingle(Output elemen : tipedata, I/O awal, akhir : nama_pointer){I.S. : pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}{F.S. : menghasilkan single linked list yang sudah dihapus satu simpul di depan}Kamus :phapus : nama_pointerAlgoritma :phapus awalelemen phapus.info If (awal = akhir) Thenawal nilakhir nil Elseawal awal .nextEndIfdealloc(phapus)EndProcedurePenghapusan di Belakang- Keadaan List memiliki satu simpul (awal = akhir)awal132akhirProses menghapus satu simpul di belakang/di akhir Linked List (menghapus simpul yang ditunjuk oleh pointer akhir)- Keadaan List memiliki lebih dari satu simpul {awal akhir} {sama seperti penghapusan di depan}Misalkan mula-mula Linked List memiliki tiga simpul

Penghapusan di Belakang (lanjutan)phapusawal13akhir2elemenphapusphapusakhirawal132phapus awalelemen akhir.infophapus phapus.next phapus phapus.next akhir phapus Penghapusan di Belakang (lanjutan)awal13phapus2akhirakhir.next nildealloc(phapus)Penghapusan di Belakang (lanjutan)Keadaan Linked List setelah terjadi penghapusan di belakang/di akhirphapusphapusakhir3awal12Algoritma Penghapusan di BelakangProcedure HapusBelakangSingle(Output elemen : tipedata, I/O awal, akhir : nama_pointer){I.S. : pointer penunjuk awal dan pointer penunjuk akhir sudah terdifinisi}{F.S. : menghasilkan single linked list yang sudah dihapus satu simpul di belakang}Kamus :phapus : nama_pointerAlgoritma :phapus awalelemen phapus.info If (awal = akhir) Thenawal nilakhir nil

Algoritma Penghapusan di Belakang (lanjutan) Elsewhile (phapus.next akhir) do phapus phapus.nextendwhileakhir phapusphapus phapus.nextakhir.next nilEndIfdealloc(phapus)EndProcedure

Penghapusan di Tengah- Keadaan List memiliki satu simpul (awal = akhir)awal254akhir3Proses menghapus satu simpul di tengah Linked List (menghapus simpul yang ditunjuk oleh pointer phapus) {sama seperti penghapusan di depan}- Keadaan List memiliki lebih dari satu simpul (awal akhir)Misalkan mula-mula List memiliki empat simpul, dan akan menghapus simpul ketigaphapusposisihapus=2bantuawal254phapusakhir3posisihapus=3elemenPenghapusan di Tengah (lanjutan)awal254akhir3posisihapus=1posisihapus=3phapusphapus.info elemenawal254phapusakhir3posisihapus=3bantuPenghapusan di Tengah (lanjutan)awal254phapusakhir3posisihapus=3bantubantu.next phapus.next dealloc(phapus)Penghapusan di Tengah (lanjutan)awal54akhir32awal54akhir3phapusposisihapus=1posisihapus=2posisihapus=3phapusbantu