linked list

Post on 12-Jan-2016

29 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

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

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

[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

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)

Deklarasi

struct simpul

{

char nama[25];

int nrp;

struct simpul *next;

};

struct simpul *ujung;

nama

nrp

next

simpul

data

pointer yg menunjuk simpul lain

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. 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

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

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

Sampai iterasi keempat

nama1

nrp1

next NULL

tampung

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

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

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

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

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

hapus = ujung;

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;

}

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

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

Menghapus simpul ttt.

nama1

nrp1

next NULL

hapus

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

sbl->next=hapus->next;

sbl

Menghapus simpul ttt.

nama1

nrp1

next NULL

nama3

nrp3

next

nama4

nrp4

next

ujung

free(hapus);

sbl

Menyisipkan setelah simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujungnamax

nrpx

next

baru

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

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

Menyisipkan sebelum simpul ttt.

nama1

nrp1

next NULL

cari

nama2

nrp2

next

nama3

nrp3

next

nama4

nrp4

next

ujung

cari = ujungnamax

nrpx

next

baru

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

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

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

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

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

top related