linked list

29
Linked List Entin Martiana

Upload: luka

Post on 12-Jan-2016

29 views

Category:

Documents


4 download

DESCRIPTION

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? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linked List

Linked List

Entin Martiana

Page 2: Linked List

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 *

Page 3: Linked List

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

Page 4: Linked List

The Linked List data structure

[0] [1] [2]array

A B CArray

linked

A B CLinked list

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

node

Page 5: Linked List

Array vs Linked List

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

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

A[2]

A[1]

A[0]

A(data 3)

A(data 2)

A(data 1)

Page 6: Linked List

Deklarasi

struct simpul

{

char nama[25];

int nrp;

struct simpul *next;

};

struct simpul *ujung;

nama

nrp

next

simpul

data

pointer yg menunjuk simpul lain

Page 7: Linked List

Membangun Linked List

Apa yang harus dilakukan?

1. Deklarasi

2. Memory allocation

3. Mengisi data

4. Menyiapkan untuk dihubungkan dengan data baru berikutnya

Page 8: Linked List

Bagaimana?

1. struct simpul *ujung;

2. ujung=(struct simpul*)malloc(sizeof(struct simpul));

3. printf("Nama :");scanf("%s",&ujung->nama);

4. printf("NRP :");scanf("%d",&ujung->nrp);

5. if(j==0)

{

ujung->next=NULL;

tampung=ujung;

} nama1

nrp1

next

ujungtampung

NULL

Page 9: Linked List

Selanjutnya

1. ujung=(struct simpul*)malloc(sizeof(struct simpul));

2. printf("Nama :");scanf("%s",&ujung->nama);

3. printf("NRP :");scanf("%d",&ujung->nrp);

4. if(j<>0)

{

ujung->next=tampung;

tampung=ujung;

}

nama2

nrp2

next

ujung

nama1

nrp1

next NULL

tampung

nama2

nrp2

next

ujungtampung

Page 10: Linked List

Selanjutnya

1. ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai));

2. printf("Nama :");scanf("%s",&ujung->nama);

3. printf("NRP :");scanf("%d",&ujung->nrp);

4. if(j<>0)

{

ujung->next=tampung;

tampung=ujung;

}

nama3

nrp3

next

ujung

nama1

nrp1

next NULL

tampung

nama2

nrp2

next

nama3

nrp3

next

ujung tampung

Page 11: Linked List

Sampai iterasi keempat

nama1

nrp1

next NULL

tampung

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

Page 12: Linked List

Membaca (Menampilkan)

nama1

nrp1

next NULL

tampil

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

tampil = ujung;

while (tampil<>NULL)

// fungsi menampilkan

tampil = tampil -> next;

tampil tampil tampil tampil

Page 13: Linked List

Mencari simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujung;

while (cari->nama!=nama2)

{

cari = cari->next;

}

cari cari

Page 14: Linked List

Menyisipkan sebagai simpul terakhir

nama1

nrp1

next

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujung

while (cari->next !=NULL)

cari = cari->next;

cari->next=baru;

namax

nrpx

next

baru

NULL

cari cari cari

NULL

Page 15: Linked List

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

hapus = ujung;

Page 16: Linked List

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

while (hapus->nama != nama2)

{

sbl = hapus;

hapus=hapus->next;

}

Page 17: Linked List

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

while (hapus->nama != nama2)

{

sbl=hapus;

hapus=hapus->next;

}

sbl

Page 18: Linked List

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

while (hapus->nama != nama2)

{

sbl=hapus;

hapus=hapus->next;

}

sbl

Page 19: Linked List

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

sbl->next=hapus->next;

sbl

Page 20: Linked List

Menghapus simpul ttt.

nama1

nrp1

next NULL

nama3

nrp3

next

nama4

nrp4

next

ujung

free(hapus);

sbl

Page 21: Linked List

Menyisipkan setelah simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujungnamax

nrpx

next

baru

Page 22: Linked List

Menyisipkan setelah simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

while (cari->nama!=nama3)

cari = cari->next;

baru->next = cari->next;

namax

nrpx

next

baru

Page 23: Linked List

Menyisipkan setelah simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari->next = baru;namax

nrpx

next

baru

Page 24: Linked List

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujungnamax

nrpx

next

baru

Page 25: Linked List

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

stl

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujung;

while (cari->nama!=nama1)

stl=cari;

cari=cari->next;

namax

nrpx

next

baru

cari

Page 26: Linked List

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

stl

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujung;

while (cari->nama!=nama1)

stl=cari;

cari=cari->next;

namax

nrpx

next

baru

cari

Page 27: Linked List

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

stl

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujung;

while (cari->nama!=nama1)

stl=cari;

cari=cari->next;

namax

nrpx

next

baru

cari

Page 28: Linked List

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

stl

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

baru->next = cari;namax

nrpx

next

baru

cari

Page 29: Linked List

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

stl

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

stl->next = baru;namax

nrpx

next

baru

cari