Pointer & Linked List
Pemakaian larik tidak selalu tepat untuk program-program terapan yang kebutuhan pengingatnya selalu bertambah selama eksekusi program tersebut. Untuk mengatasi hal tersebut dibutuhkan sebuah tipe data yang sifatnya adalah dinamis yaitu penggunaan memori dilakukan sesuai dengan kebutuhan dan akan dibebaskan jika sudah selesai walapun pada saat itu program masih sedang berjalan. S Budi 10 Budi D 10 Variabel Statis Variabel Dinamis
A M I K B P P M I A K B NIL 7 6 8 2 4 Info Next Start 1 2 Data 3 4 5 6 1 2 3 4 5 6 7 8 9 P M I A K B NIL 7 6 8 2 4 Data
A M I K B P Data : array[1..7] of char Data
P M I A K B NIL 7 6 8 2 4 Simpul Info Next Start 1 2 Point = ^Data 1 2 3 4 5 6 7 8 9 NIL 7 6 8 2 4 Point = ^Data Data = Record Info : char Next : point end Simpul Info Next
Simpul =^Data Data = record info : type data Next :Simpul end Simpul Peg Peg =^data Data= Record Nama : string[20] Nip : string[10] Jabatan : String[10] Gapok : Real Next : Peg; end Peg^.Nama Peg^.Next Peg^.Nip Peg^.Jabatan Peg^.Gapok
Operasi Pointer OS Nama Membentuk simpul dalam memori Nip Jabatan New(Var Pointer) Cth : New (Pegawai) OS Nama Nip Jabatan gapok Fisik Logika
Deklarasi Variabel Var P1,P2 : Peg New(p1) P1 ? New(p2) P2 ?
? P1.Nama = Budi P1.Nip = 100 P1.Jabatan=staf P1.Gapok = 100000 1000000 P1.Nama = Budi P1.Nip = 100 P1.Jabatan=staf P1.Gapok = 100000 (Variabel Statis) P1^.Nama = Budi P1^.Nip = 100 P1^.Jabatan=staf P1^.Gapok = 100000 P1^.Next = nil (Variabel Dinamis) P2 ?
Deklarasi Variabel Var P1,P2 : Peg Peg =^data Data= Record Nama : string[20] Nip : string[10] Jabatan : String[10] Gapok : Real Next : Peg; end Deklarasi Variabel Var P1,P2 : Peg P1 Budi 100 staf 1000000 P2 ?
Deklarasi Variabel Var P1,P2 : Peg P2 = P1 Peg =^data Data= Record Nama : string[20] Nip : string[10] Jabatan : String[10] Gapok : Real Next : Peg; end Deklarasi Variabel Var P1,P2 : Peg P1 Budi 100 staf 1000000 P2 = P1 P2 ?
Deklarasi Variabel Var P1,P2 : Peg P1^.next = P2 Peg =^data Data= Record Nama : string[20] Nip : string[10] Jabatan : String[10] Gapok : Real Next : Peg; end Deklarasi Variabel Var P1,P2 : Peg P1 P1^.next = P2 Budi 100 staf 1000000 P2 ?
P2 P1^.next = P2 P1 P1 Budi 100 staf 1000000 P2 ? P1^.Next Budi 100 P1^.Nama P1^.Nip P1^.Jabatan P1^.Gapok P2 P1^.Next^.Nama P1^.Next^.Nip P1^.Next^.Gapok P1^.Next^.Next P1^.Next^.Jabatan
Linked List/Senarai Berantai senarai berantai adalah kumpulan komponen yang disusun secara berurutan dengan bantuan pointer, dimana masing-masing kompoen dinamakan sebagai simpul. Pada dasarnya satu buah simpul terdiri dari dua bagian, dimana bagaian pertama dinamakan sebagai Informasi, dan bagian ke dua adalah penunjuk (pointer) untuk simpul yang berikutnya Senarai berantai dengan 4 simpul
Operasi Pada Senarai Menambah Simpul Menambah Simpul di Awal Menambah simpul di akhir Menambah Simpul di tengah Menghapus Simpul Menghapus Simpul Awal Menghapus Simpul di Akhir Menghapus Simpul Di Tengah Membaca isi Senarai (Travelsal)
Menambah Simpul Maka Nilai pointer adalah Awal = nil Akhir = nil Sebelum melakukan penambahan simpul, kita inisialisasi struktur datanya adalah Type Simpul =^data Data = record Info : char; Next : Simpul End; Var Elemen : char Awal, Akhir, Baru : Simpul Maka Nilai pointer adalah Awal = nil Akhir = nil Baru = nil
Menambah Simpul Awal New (baru) awal Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal New(Baru) Baru
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal 10 Baru^.info = elemen Baru
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal 10 Baru Awal = baru
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal 10 Baru Awal^.next = nil
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal New(Baru) 10 Baru
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal Baru^.info = elemen 10 20 Baru
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal 10 20 Baru Baru^.Next = Awal
Menambah Simpul Awal awal Procedure tambah1(elemen : tipedata) New (Baru0 Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi awal 10 20 Baru awal = baru awal 20 10 Baru
Procedure tambah1(elemen : tipedata) New(Baru) Baru^.info = elemen awal Procedure tambah1(elemen : tipedata) New(Baru) Baru^.info = elemen If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi 20 10 New(Baru) Baru^.info = elemen 30 Baru Baru^.Next = Awal awal = baru
Contoh 1: Buat Algoritma untuk menghasilkan Linked list sebagai berikut P M K M A B I awal
Algoritma Procedure Tambah( x : char) New (baru) Baru^.info = X If awal = nil Then Awal = baru Awal^.Next = nil Else Baru^.next = awal fi //Program Utama Read Kalimat I = 1 While I <= length(Kalimat) do Tambah(kalimat[i] I = I + 1 E-while
Menambah Di Akhir Procedure Tambah2(x : tipedata) New(baru) Baru^.info = X Baru^.Next = nil If awal = nil Then Awal = baru Else Akhir = awal While akhir^.next <> nil Do Akhir = Akhir^.next e-while akhir^.next = baru fi Awal New (Baru) Baru
Menambah Di Akhir Procedure Tambah2(x : tipedata) New(baru) Baru^.info = X Baru^.Next = nil If awal = nil Then Awal = baru Else Akhir = awal While akhir^.next <> nil Do Akhir = Akhir^.next e-while akhir^.next = baru fi Awal Baru^.info = X 10 Baru
Menambah Di Akhir Procedure Tambah2(x : tipedata) New(baru) Baru^.info = X Baru^.Next = nil If awal = nil Then Awal = baru Else Akhir = awal While akhir^.next <> nil Do Akhir = Akhir^.next e-while akhir^.next = baru fi Awal 10 Baru^.Next = Nil Baru
Menambah Di Akhir Procedure Tambah2(x : tipedata) New(baru) Baru^.info = X Baru^.Next = nil If awal = nil Then Awal = baru Else Akhir = awal While akhir^.next <> nil Do Akhir = Akhir^.next e-while akhir^.next = baru fi Awal 10 Baru Awal = Baru
Menambah Di Akhir Procedure Tambah2(x : tipedata) New(baru) Baru^.info = X Baru^.Next = nil If awal = nil Then Awal = baru Else Akhir = awal While akhir^.next <> nil Do Akhir = Akhir^.next e-while akhir^.next = baru fi Awal New (Baru) Baru^.info = X 10 Baru^.Next = Nil akhir 20 Baru Akhir = awal Akhir^.Next = Baru
Menambah Di Akhir Procedure Tambah2(x : tipedata) New(baru) Baru^.info = X Baru^.Next = nil If awal = nil Then Awal = baru Else Akhir = awal While akhir^.next <> nil Do Akhir = Akhir^.next e-while akhir^.next = baru fi Awal New (Baru) Baru^.info = X 10 20 Baru^.Next = Nil akhir 30 Baru Akhir = awal Akhir =Akhir^.Nextl Akhir^.Next = Baru
Menambah Di Tengah New (Baru) Baru^.Info = X Bantu = awal While Baru^.info > bantu^.Next^.info do Bantu = Bantu^.next E-while Baru^.next = Bantu^.Next Bantu^.next = baru New (Baru) 10 60 Baru
Menambah Di Tengah New(Baru) Baru^.Info = X Bantu = awal While Baru^.info > bantu^.Next^.info do Bantu = Bantu^.next E-while Baru^.next = Bantu^.Next Bantu^.next = baru Baru^.info = x 10 60 30 Baru
Menambah Di Tengah New(Baru) Baru^.Info = X Bantu = awal While Baru^.info > bantu^.Next^.info do Bantu = Bantu^.next E-while Baru^.next = Bantu^.Next Bantu^.next = baru Bantu = awal 10 60 Bantu 30 Baru
Menambah Di Tengah New(Baru) Baru^.Info = X Bantu = awal While Baru^.info > bantu^.Next^.info do Bantu = Bantu^.next E-while Baru^.next = Bantu^.Next Bantu^.next = baru 10 60 Bantu 30 Baru Baru^.next = Bantu^.Next
Menambah Di Tengah New(Baru) Baru^.Info = X Bantu = awal While Baru^.info > bantu^.Next^.info do Bantu = Bantu^.next E-while Baru^.next = Bantu^.Next Bantu^.next = baru 10 60 Bantu 30 Baru Bantu^.next = baru
Menambah Di Tengah New(Baru) Baru^.Info = X Bantu = awal While Baru^.info > bantu^.Next^.info do Bantu = Bantu^.next E-while Baru^.next = Bantu^.Next Bantu^.next = baru Baru^.info = x Bantu = awal 10 30 60 Bantu Bantu = Bantu^.Next 40 Baru^.next = Bantu^.Next Baru Bantu^.next = baru
Menambah Di Akhir Kepala 10 20 akhir 30 Baru