LIST REKURSIF.
LIST REKURSIF
Danang Wahyu Utomo
danang.wu@dsn.dinus.ac.id
+6285 740 955 623
Danang Wahyu Utomo, M.Kom, M.CS
RENCANA KEGIATAN PERKULIAHAN SEMESTER
W
Pokok Bahasan
W
Pokok Bahasan
1 ADT Stack
9
Variasi List Linear
2 ADT Queue
10 Double Linked List
3 List Linear
11 Stack dengan Representasi List
4 List Linear
12 Queue dengan Representasi List
5 List Linear
13 List Rekursif
6 Representasi Fisik List Linear
14 Pohon dan Pohon Biner
7 Variasi List Linear
15 Multi List
8 Ujian Tengah Semester
16 Ujian Akhir Semester
Danang Wahyu Utomo, M.Kom, M.CS
Konten
Pendekatan Iteratif dan Rekursif
Membalik List secara Iteratif
Fungsi Rekursif pada Memory
Membalik List secara Rekursif
Danang Wahyu Utomo, M.Kom, M.CS
Pendekatan Iteratif dan Rekursif
Pendekatan iteratif menggunakan proses perulangan
(loop) untuk menyelesaikan masalah
Dalam konteks prosedural kita memiliki loop sebagai
mekanisme untuk mengulang
Suatu entitas disebut rekursif jika pada definisinya
terkandung dirinya sendiri
Program prosedural juga dapat bersifat rekursif
Fungsi rekursif adalah fungsi yang memanggil dirinya
sendiri
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Input
100
10
Head
200
8
100
300
14
200
400
7
300
Null
400
Output
10
Null
100
8
100
200
14
200
300
7
300
400
400
Head
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Diperlukan tiga variabel pointer :
-
-
-
Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head
10
Null
8
300
100
200
prev
100
curr
200
14
400
300
7
Null
400
next
200
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Diperlukan tiga variabel pointer :
-
-
-
Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head
10
Null
8
300
100
200
prev
100
curr
200
14
400
300
7
Null
400
next
200
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Diperlukan tiga variabel pointer :
-
-
-
Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head
10
Null
8
100
100
200
prev
100
curr
200
14
400
300
7
Null
400
next
200
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Fungsi membalik list secara iteratif
void balikListIteratif(){
Node *curr, *prev, *next;
curr = head;
prev = NULL;
while(curr != NULL){
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Memory yang dialokasikan pada sebuah program/aplikasi
umumnya dibagi menjadi 4 bagian :
Heap /
Free Store
Stack
Static/Global
Bersifat Dinamis:
Ukuran memori dapat berubah ketika
program dijalankan
Bersifat Statis:
• ukuran memori ditentukan ketika
kompilasi
• ukuran memori tidak dapat berubah
Code(Text)
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Memory yang dialokasikan pada sebuah program/aplikasi
umumnya dibagi menjadi 4 bagian :
Heap /
Free Store
Memori yang dapat di-request selama program
berjalan
Stack
Menyimpan semua informasi tentang
pemanggilan fungsi untuk menyimpan
semua variabel lokal
Static/Global Menyimpan variabel global selama program berjalan
Code(Text)
Menyimpan semua perintah yang akan
dijalankan/dieksekusi
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika
terjadi pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Fungsi_1(y)
Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Jika fungsi pada tumpukan paling atas
selesai dijalankan, fungsi pada tumpukan
dibawahnya akan dijalankan kembali
Fungsi_1(y)
Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Input
100
10
Head
200
8
100
300
14
200
400
7
300
Null
400
Output
10
Null
100
8
100
200
14
200
300
7
300
400
400
Head
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi Membalik list secara Rekursif
7
Null
400
14
400
void balikRekursif (Node *p){
if(p->next == NULL){
300
head = p;
return;
}
balikRekursif(p->next); //rekursif
p->next->next = p;
p->next = NULL;
8
300
200
10
200
100
}
head = 100
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
8
300
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
300
400
400
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
300
400
400
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
300
400
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
300
400
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
200
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
200
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
Null
200
main()
10
200
200
300
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
Null
200
main()
10
200
200
300
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
100
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
100
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
Stack Memory
100
200
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
Stack Memory
100
200
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
fungsi sudah dijalankan sebelumnya
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
fungsi sudah dijalankan sebelumnya
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
head = 400
void balikRekursif (Node *p){
7
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
300
400
14
200
300
8
100
200
10
Null
100
Danang Wahyu Utomo, M.Kom, M.CS
Danang Wahyu Utomo
danang.wu@dsn.dinus.ac.id
+6285 740 955 623
Danang Wahyu Utomo, M.Kom, M.CS
RENCANA KEGIATAN PERKULIAHAN SEMESTER
W
Pokok Bahasan
W
Pokok Bahasan
1 ADT Stack
9
Variasi List Linear
2 ADT Queue
10 Double Linked List
3 List Linear
11 Stack dengan Representasi List
4 List Linear
12 Queue dengan Representasi List
5 List Linear
13 List Rekursif
6 Representasi Fisik List Linear
14 Pohon dan Pohon Biner
7 Variasi List Linear
15 Multi List
8 Ujian Tengah Semester
16 Ujian Akhir Semester
Danang Wahyu Utomo, M.Kom, M.CS
Konten
Pendekatan Iteratif dan Rekursif
Membalik List secara Iteratif
Fungsi Rekursif pada Memory
Membalik List secara Rekursif
Danang Wahyu Utomo, M.Kom, M.CS
Pendekatan Iteratif dan Rekursif
Pendekatan iteratif menggunakan proses perulangan
(loop) untuk menyelesaikan masalah
Dalam konteks prosedural kita memiliki loop sebagai
mekanisme untuk mengulang
Suatu entitas disebut rekursif jika pada definisinya
terkandung dirinya sendiri
Program prosedural juga dapat bersifat rekursif
Fungsi rekursif adalah fungsi yang memanggil dirinya
sendiri
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Input
100
10
Head
200
8
100
300
14
200
400
7
300
Null
400
Output
10
Null
100
8
100
200
14
200
300
7
300
400
400
Head
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Diperlukan tiga variabel pointer :
-
-
-
Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head
10
Null
8
300
100
200
prev
100
curr
200
14
400
300
7
Null
400
next
200
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Diperlukan tiga variabel pointer :
-
-
-
Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head
10
Null
8
300
100
200
prev
100
curr
200
14
400
300
7
Null
400
next
200
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Diperlukan tiga variabel pointer :
-
-
-
Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head
10
Null
8
100
100
200
prev
100
curr
200
14
400
300
7
Null
400
next
200
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Iteratif
Fungsi membalik list secara iteratif
void balikListIteratif(){
Node *curr, *prev, *next;
curr = head;
prev = NULL;
while(curr != NULL){
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
}
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Memory yang dialokasikan pada sebuah program/aplikasi
umumnya dibagi menjadi 4 bagian :
Heap /
Free Store
Stack
Static/Global
Bersifat Dinamis:
Ukuran memori dapat berubah ketika
program dijalankan
Bersifat Statis:
• ukuran memori ditentukan ketika
kompilasi
• ukuran memori tidak dapat berubah
Code(Text)
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Memory yang dialokasikan pada sebuah program/aplikasi
umumnya dibagi menjadi 4 bagian :
Heap /
Free Store
Memori yang dapat di-request selama program
berjalan
Stack
Menyimpan semua informasi tentang
pemanggilan fungsi untuk menyimpan
semua variabel lokal
Static/Global Menyimpan variabel global selama program berjalan
Code(Text)
Menyimpan semua perintah yang akan
dijalankan/dieksekusi
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika
terjadi pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Fungsi_1(y)
Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Fungsi Rekursif pada Memory
Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Jika fungsi pada tumpukan paling atas
selesai dijalankan, fungsi pada tumpukan
dibawahnya akan dijalankan kembali
Fungsi_1(y)
Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Input
100
10
Head
200
8
100
300
14
200
400
7
300
Null
400
Output
10
Null
100
8
100
200
14
200
300
7
300
400
400
Head
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi Membalik list secara Rekursif
7
Null
400
14
400
void balikRekursif (Node *p){
if(p->next == NULL){
300
head = p;
return;
}
balikRekursif(p->next); //rekursif
p->next->next = p;
p->next = NULL;
8
300
200
10
200
100
}
head = 100
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
8
300
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
14
400
300
balikRekursif()
p = 100
8
main()
10
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 400
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
Null
400
balikRekursif()
p = 200
14
400
balikRekursif()
p = 100
8
main()
10
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
300
400
400
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
300
400
400
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
300
400
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
balikRekursif()
p = 300
7
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
300
400
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
Null
300
balikRekursif()
p = 100
8
300
main()
10
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
200
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
main()
10
200
300
300
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
Null
200
main()
10
200
200
300
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
balikRekursif()
p = 200
14
balikRekursif()
p = 100
8
Null
200
main()
10
200
200
300
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
Null
200
main()
10
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
100
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
100
200
200
100
Stack Memory
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
Stack Memory
100
200
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
balikRekursif()
p = 100
8
main()
10
Stack Memory
100
200
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
fungsi sudah dijalankan sebelumnya
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
fungsi sudah dijalankan sebelumnya
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
head = 400
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
7
300
400
14
200
300
8
100
200
main()
Stack Memory
10
Null
100
Heap Memory
Danang Wahyu Utomo, M.Kom, M.CS
Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
head = 400
void balikRekursif (Node *p){
7
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}
300
400
14
200
300
8
100
200
10
Null
100
Danang Wahyu Utomo, M.Kom, M.CS