Anda di halaman 1dari 29

Linked List

Entin Martiana

Malloc
Memory Allocation (malloc) adalah sebuah fungsi fasilitas untuk memesan tempat secara berurutan untuk tipe data dinamis(pointer) Nilai balik dari memory allocation adalah void *

Problem
Bagaimana jika kita pesan 50000 alamat berurutan?
Akan selalu gagal. Untuk itu kita lakukan memory allocation untuk setiap satu data.

Bagaimana agar data pertama tetap berhubungan dengan data kedua?


Kita gunakan pointer untuk menghubungkan

The Linked List data structure


array [0] [1] [2] A B C

Array

node
linked

Linked list

Linked lists are unbounded (maximum number of items limited only by memory)

Array vs Linked List


Array : int A[3] Linked List : struct list *A;
A(data 3)

A[2]
A[1] A[0] A(data 2) A(data 1)

Linked lists are unbounded (maximum number of items limited only by memory)

Deklarasi
struct simpul { char nama[25]; int nrp; struct simpul *next; }; struct simpul *ujung;
simpul

nama
data

nrp

pointer yg menunjuk simpul lain

next

Membangun Linked List


Apa yang harus dilakukan? 1. Deklarasi 2. Memory allocation 3. Mengisi data 4. Menyiapkan untuk dihubungkan dengan data baru berikutnya

Bagaimana?
1. 2. 3. 4. 5. struct simpul *ujung; ujung=(struct simpul*)malloc(sizeof(struct simpul)); printf("Nama :");scanf("%s",&ujung->nama); printf("NRP :");scanf("%d",&ujung->nrp); if(j==0) { ujung ujung->next=NULL; tampung=ujung; nama1 }

tampung

nrp1 next
NULL

Selanjutnya
ujung

1. 2. 3. 4.

ujung=(struct simpul*)malloc(sizeof(struct simpul)); printf("Nama :");scanf("%s",&ujung->nama); printf("NRP :");scanf("%d",&ujung->nrp); if(j<>0) {


ujung->next=tampung; tampung=ujung;

nama2
nrp2 next

}
ujung tampung tampung

nama2 nrp2 next

nama1 nrp1 next


NULL

Selanjutnya
ujung

1. 2. 3. 4.

ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("Nama :");scanf("%s",&ujung->nama); printf("NRP :");scanf("%d",&ujung->nrp); if(j<>0) {


ujung->next=tampung; tampung=ujung;

nama3
nrp3 next

}
ujung tampung tampung

nama3 nrp3 next

nama2 nrp2 next

nama1 nrp1 next


NULL

Sampai iterasi keempat


ujung

nama4 nrp4 next


tampung

nama3 nrp3 next

nama2 nrp2 next

nama1 nrp1 next


NULL

Membaca (Menampilkan)
ujung

nama4 nrp4 next


tampil

nama3 nrp3 next


tampil

nama2 nrp2 next


tampil

nama1 nrp1 next


tampil

NULL tampil

tampil = ujung;
while (tampil<>NULL) // fungsi menampilkan tampil = tampil -> next;

Mencari simpul ttt.


ujung

nama4 nrp4 next


cari

nama3 nrp3 next


cari

nama2 nrp2 next


cari

nama1 nrp1 next


NULL

cari = ujung;
while (cari->nama!=nama2) { cari = cari->next;

Menyisipkan sebagai simpul terakhir


ujung

nama4 nrp4 next


cari

nama3 nrp3 next


cari

nama2 nrp2 next


cari

nama1 nrp1 next


cari baru NULL

cari = ujung

while (cari->next !=NULL)


cari = cari->next; cari->next=baru;

namax
nrpx next
NULL

Menghapus simpul ttt.


ujung

nama4 nrp4 next


hapus

nama3 nrp3 next

nama2 nrp2 next

nama1 nrp1 next


NULL

hapus = ujung;

Menghapus simpul ttt.


ujung

nama4 nrp4 next


hapus

nama3 nrp3 next

nama2 nrp2 next

nama1 nrp1 next


NULL

while (hapus->nama != nama2)


{ sbl = hapus; hapus=hapus->next;

Menghapus simpul ttt.


ujung

nama4 nrp4 next


sbl

nama3 nrp3 next


hapus

nama2 nrp2 next

nama1 nrp1 next


NULL

while (hapus->nama != nama2)


{ sbl=hapus; hapus=hapus->next;

Menghapus simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next


sbl

nama2 nrp2 next


hapus

nama1 nrp1 next


NULL

while (hapus->nama != nama2)


{ sbl=hapus; hapus=hapus->next;

Menghapus simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next


sbl

nama2 nrp2 next


hapus

nama1 nrp1 next


NULL

sbl->next=hapus->next;

Menghapus simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next


sbl

nama1 nrp1 next


NULL

free(hapus);

Menyisipkan setelah simpul ttt.


ujung

nama4 nrp4 next


cari

nama3 nrp3 next

nama2 nrp2 next

nama1 nrp1 next


NULL

baru

cari = ujung

namax nrpx

next

Menyisipkan setelah simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next


cari baru

nama2 nrp2 next

nama1 nrp1 next


NULL

while (cari->nama!=nama3)
cari = cari->next; baru->next = cari->next;

namax nrpx

next

Menyisipkan setelah simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next


cari baru

nama2 nrp2 next

nama1 nrp1 next


NULL

namax
cari->next = baru;

nrpx

next

Menyisipkan sebelum simpul ttt.


ujung

nama4 nrp4 next


cari

nama3 nrp3 next

nama2 nrp2 next

nama1 nrp1 next


NULL

baru

cari = ujung

namax nrpx

next

Menyisipkan sebelum simpul ttt.


ujung

nama4 nrp4 next


stl

nama3 nrp3 next


cari baru

nama2 nrp2 next

nama1 nrp1 next


NULL

cari = ujung;
while (cari->nama!=nama1) stl=cari; cari=cari->next;

namax nrpx

next

Menyisipkan sebelum simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next


stl baru

nama2 nrp2 next


cari

nama1 nrp1 next


NULL

cari = ujung;
while (cari->nama!=nama1) stl=cari; cari=cari->next;

namax nrpx

next

Menyisipkan sebelum simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next

nama2 nrp2 next


stl baru

nama1 nrp1 next


cari

NULL

cari = ujung;
while (cari->nama!=nama1) stl=cari; cari=cari->next;

namax nrpx

next

Menyisipkan sebelum simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next

nama2 nrp2 next


stl baru

nama1 nrp1 next


cari

NULL

baru->next = cari;

namax nrpx

next

Menyisipkan sebelum simpul ttt.


ujung

nama4 nrp4 next

nama3 nrp3 next

nama2 nrp2 next


stl baru

nama1 nrp1 next


cari

NULL

stl->next = baru;

namax nrpx

next

Anda mungkin juga menyukai