Anda di halaman 1dari 41

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
D
10
Budi 10 Budi
Variabel Statis Variabel Dinamis
Start Info Next
A 0 P NIL
Data M 1
2 M 7
I 3
4 I 6
K
5 A 8
M 6 K 2
7 B 0
B
8 M 4
P 9
A
Data : array[1..7] of char
Data M

P
Start Info Next

P 0 NIL
1 Point = ^Data
M 2 7 Data = Record
3 Info : char
I 4 6 Next :
A 8 point
5
K 2 end
6
B 7 0
Simpul
M 8
4

Info
Next
Simpul
Simpul =^Data
Data = record
Info
Next info : type data
Next :Simpul
Peg end
Peg =^data
Data= Record
Nama : string[20]
Pe

Pe
Pe

Nip : string[10]
Pe
Pe
g^

g^
g^

g^
g^
.N

.N
.J

Jabatan : String[10]
.G
am

.N

ab

ex
ap
ip

at

Gapok : Real
t
a

ok
an

Next : Peg;
end
Operasi Pointer
Membentuk simpul dalam memori
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

Budi 100 staf 1000000

P1.Nama = Budi P1^.Nama = Budi


P1.Nip = 100 P1^.Nip = 100
P1.Jabatan=staf P1^.Jabatan=staf
P1.Gapok = 100000 P1^.Gapok = 100000
(Variabel Statis) P1^.Next = nil
(Variabel Dinamis)
P2

? ? ? ? ?
Peg =^data
Data= Record Deklarasi Variabel
Nama : string[20] Var P1,P2 : Peg
Nip : string[10]
Jabatan : String[10]
Gapok : Real
Next : Peg;
end
P1

Budi 100 staf 1000000


P2

? ? ? ? ?
Peg =^data
Data= Record Deklarasi Variabel
Nama : string[20] Var P1,P2 : Peg
Nip : string[10]
Jabatan : String[10]
Gapok : Real
Next : Peg;
end
P1

Budi 100 staf 1000000


P2 = P1
P2

? ? ? ? ?
Peg =^data
Data= Record Deklarasi Variabel
Nama : string[20] Var P1,P2 : Peg
Nip : string[10]
Jabatan : String[10]
Gapok : Real
Next : Peg;
end
P1
P1^.next = P2
Budi 100 staf 1000000

P2

? ? ? ? ?
P1^.Next^.Next
?
?
1000000

P1^.Next^.Gapok
?

P1^.Next
P1^.next = P2

P1^.Next^.Jabatan
?
staf

P1^.Next^.Nip
?
100

? P1^.Next^.Nama
1000000

P2
Budi

staf P1^.Gapok
P1^.Jabatan
P2
P1

100
P1^.Nip

P1

Budi
P1^.Nama
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
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
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New(Baru)
Baru^.info = elemen
If awal = nil
Then Baru
Awal = baru
Awal^.Next = nil
Else
Baru^.next = awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
Baru^.info
Baru^.info == elemen
elemen 10
If awal = nil
Then Baru
Awal = baru
Awal^.Next = nil
Else
Baru^.next = awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
Baru^.info = elemen 10
If awal = nil
Then Baru
Awal = baru
Awal = baru
Awal^.Next = nil
Else
Baru^.next = awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
Baru^.info = elemen 10
If awal = nil
Then Baru
Awal = baru
Awal^.next = nil= nil
Awal^.Next
Else
Baru^.next = awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
New(Baru)
Baru^.info = elemen 10
If awal = nil
Then
Awal = baru
Awal^.Next = nil
Baru
Else
Baru^.next = awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
Baru^.info
Baru^.info==elemen
elemen 10
If awal = nil
Then
20
Awal = baru
Awal^.Next = nil
Baru
Else
Baru^.next = awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
Baru^.info = elemen 10
If awal = nil
Then
20
Awal = baru
Awal^.Next = nil
Baru
Else
Baru^.next =
Baru^.Next = Awal
awal
Awal = baru
fi
Menambah Simpul Awal
Procedure tambah1(elemen : awal
tipedata)
New (Baru0
Baru^.info = elemen 10
If awal = nil
Then
20
Awal = baru
Awal^.Next = nil
Baru
Else
Baru^.next = awal
Awal==baru
awal baru
fi awal
20 10

Baru
awal
Procedure tambah1(elemen :
tipedata) 20 10

New(Baru)
New(Baru)
Baru^.info
Baru^.info==elemen
elemen 30
If awal = nil
Then Baru
Awal = baru
Awal^.Next = nil
Else
Baru^.next =
Baru^.Next = Awal
awal
Awal==baru
awal baru
fi
Contoh 1:
Buat Algoritma untuk menghasilkan
Linked list sebagai berikut
P B M K I M A

awal
Algoritma
Procedure Tambah( x : char)
New (baru) //Program Utama

Baru^.info = X Read Kalimat


If awal = nil I=1
Then While I <= length(Kalimat)
Awal = baru do
Awal^.Next = nil Tambah(kalimat[i]
Else I=I+1
Baru^.next = awal E-while
Awal = baru
fi
Menambah Di Akhir
Procedure Tambah2(x :
tipedata) Awal
New(baru)
New (Baru)
Baru^.info = X
Baru^.Next = nil
If awal = nil
Then Baru
Awal = baru
Else
Akhir = awal
While akhir^.next <> nil
Do
Akhir = Akhir^.next
e-while
akhir^.next = baru
fi
Menambah Di Akhir
Procedure Tambah2(x :
tipedata) Awal
New(baru)
Baru^.info = X
Baru^.Next = nil 10
If awal = nil
Then Baru
Awal = baru
Else
Akhir = awal
While akhir^.next <> nil
Do
Akhir = Akhir^.next
e-while
akhir^.next = baru
fi
Menambah Di Akhir
Procedure Tambah2(x :
tipedata) Awal
New(baru)
Baru^.info = X
Baru^.Next = Nil
nil 10
If awal = nil
Then Baru
Awal = baru
Else
Akhir = awal
While akhir^.next <> nil
Do
Akhir = Akhir^.next
e-while
akhir^.next = baru
fi
Menambah Di Akhir
Procedure Tambah2(x :
tipedata) Awal
New(baru)
Baru^.info = X
Baru^.Next = nil 10
If awal = nil
Then Baru
AwalAwal = baru
= Baru
Else
Akhir = awal
While akhir^.next <> nil
Do
Akhir = Akhir^.next
e-while
akhir^.next = baru
fi
Menambah Di Akhir
Procedure Tambah2(x :
tipedata) Awal
New(baru)
New (Baru)
Baru^.info = X
Baru^.Next = Nilnil 10
If awal = nil
Then akhir 20
Awal = baru
Else
Baru
Akhir
Akhir==awal
awal
While akhir^.next <> nil
Do
Akhir = Akhir^.next
e-while
Akhir^.Next =
akhir^.next = baru
Baru
fi
Menambah Di Akhir
Procedure Tambah2(x :
tipedata) Awal
New(baru)
New (Baru)
Baru^.info = X
10 20
Baru^.Next = Nilnil
If awal = nil
Then akhir 30
Awal = baru
Else
Baru
Akhir
Akhir==awal
awal
While akhir^.next <> nil
Do
Akhir
Akhir = Akhir^.next
=Akhir^.Nextl
e-while
Akhir^.Next =
akhir^.next = baru
Baru
fi
Menambah Di Tengah
New (Baru) Awal
New (Baru)
Baru^.Info = X
Bantu = awal 10 60
While Baru^.info >
bantu^.Next^.info do
Bantu = Bantu^.next
E-while
Baru
Baru^.next = Bantu^.Next
Bantu^.next = baru
Menambah Di Tengah
New(Baru) Awal

Baru^.Info
Baru^.info ==
xX
Bantu = awal 10 60
While Baru^.info >
bantu^.Next^.info do
Bantu = Bantu^.next 30
E-while
Baru
Baru^.next = Bantu^.Next
Bantu^.next = baru
Menambah Di Tengah
New(Baru) Awal

Baru^.Info = X
Bantu==awal
Bantu awal 10 60
While Baru^.info >
bantu^.Next^.info do Bantu
Bantu = Bantu^.next 30
E-while
Baru
Baru^.next = Bantu^.Next
Bantu^.next = baru
Menambah Di Tengah
New(Baru) Awal

Baru^.Info = X
Bantu = awal 10 60
While Baru^.info >
bantu^.Next^.info do Bantu
Bantu = Bantu^.next 30
E-while
Baru
Baru^.next
Baru^.next==Bantu^.Next
Bantu^.Next
Bantu^.next = baru
Menambah Di Tengah
New(Baru) Awal

Baru^.Info = X
Bantu = awal 10 60
While Baru^.info >
bantu^.Next^.info do Bantu
Bantu = Bantu^.next 30
E-while
Baru
Baru^.next = Bantu^.Next
Bantu^.next==baru
Bantu^.next baru
Menambah Di Tengah
New(Baru) Awal
New (Baru)
Baru^.Info
Baru^.info ==xX
Bantu==awal
Bantu awal 10 30 60
While Baru^.info >
bantu^.Next^.info do Bantu
Bantu
Bantu = Bantu^.next
= Bantu^.Next
40
E-while
Baru^.next
Baru^.next==Bantu^.Next
Bantu^.Next Baru
Bantu^.next==baru
Bantu^.next baru
Menambah Di Akhir
Kepala

10 20

akhir 30

Baru

Anda mungkin juga menyukai