materi 3 - double linked list

Post on 20-Jan-2016

60 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

DOUBLE LINKED LIST

Double Linked List

Operasi Double Linked List

Membangun Double Linked List Membaca list, dalam dua arah.dalam dua arah. Mencari simpul tertentu Menghapus simpul tertentu Menyisipkan sebagai simpul pertama Menyisipkan simpul di tengah

Double Linked List

head

0 1 2 3 4

tail

Deklarasi

struct simpul{

char nama[25];int nrp;struct simpul *before;struct simpul *next;

};

struct simpul *baru;

nama

nrp

before

simpul

data

pointer yg menunjuk simpul sebelumnya

nextpointer yg menunjuk simpul berikutnya

Membangun Linked List

Apa yang harus dilakukan?1. Deklarasi2. Memory allocation3. Mengisi data4. Menyiapkan untuk dihubungkan

dengan data baru berikutnya

Bagaimana?

1. struct simpul *baru;

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

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

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

5. if(pertama)

{

baru->before=NULL;

nama1

nrp1

before

baru

nama1

nrp1

before

baru

next

next

NULL

Bagaimana?

1. struct simpul *baru;

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

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

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

5. if(pertama)

{

baru->before=NULL;

baru->next=NULL;

nama1

nrp1

before

NULL

baru

nama1

nrp1

before

baru

next

next

NULL

Bagaimana?

1. struct simpul *baru;

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

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

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

5. if(pertama)

{

baru->before=NULL;

baru->next=NULL;

head=baru;

nama1

nrp1

before

NULL

head

nama1

nrp1

before

baru

next

next

NULL

baru

Bagaimana?

1. struct simpul *baru;

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

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

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

5. if(pertama)

{

baru->before=NULL;

baru->next=NULL;

head = baru;

tail = baru;

}

nama1

nrp1

before

NULL

head

nama1

nrp1

before

baru

next

next

NULL

barutail

Selanjutnya

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

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

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

4. if(bukanpertama)

{

baru->next=NULL;

nama2

nrp2

before

NULL

baru

nama1

nrp1

before

head

nama2

nrp2

before

baru

next

next nextNULL

NULL

tail

Selanjutnya1. baru=(struct simpul*)malloc(sizeof(struct simpul));

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

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

4. if(bukanpertama)

{

baru->next=NULL;

tail->next=baru;

nama2

nrp2

before

NULL

baru

nama1

nrp1

before

head

nama2

nrp2

before

baru

next

next nextNULL

tail

Selanjutnya

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

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

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

4. if(bukanpertama)

{

baru->next=NULL;

tail->next=baru;

baru->before=tail;

nama2

nrp2

before

NULL

baru

nama1

nrp1

before

head

nama2

nrp2

before

baru

next

next nextNULL

tail

Selanjutnya1. baru=(struct simpul*)malloc(sizeof(struct simpul));2. printf("Nama :");scanf("%s",&baru->nama);3. printf("NRP :");scanf("%d",&baru->nrp);4. if(j<>0)

{baru->next=NULL;tail->next=baru;baru->before=tail;tail=baru;

}

nama2

nrp2

before

NULL

tail

nama1

nrp1

before

head

nama2

nrp2

before

baru

next

next nextNULL

Sampai iterasi keempat

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

Membaca (FIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

bacaFIFO = head;

bacaFIFO

Membaca (FIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaFIFO!=NULL)

// fungsi menampilkan

bacaFIFO = bacaFIFO -> next;

bacaFIFO

Membaca (FIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaFIFO<>NULL)

// fungsi menampilkan

bacaFIFO = bacaFIFO -> next;

bacaFIFO

Membaca (FIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaFIFO<>NULL)

// fungsi menampilkan

bacaFIFO = bacaFIFO -> next;

bacaFIFO

Membaca (FIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaFIFO<>NULL)

// fungsi menampilkan

bacaFIFO = bacaFIFO -> next;

bacaFIFO

Membaca (LIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

bacaLIFO = tail;

bacaLIFO

Membaca (LIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaLIFO<>NULL)

// fungsi menampilkan

bacaLIFO = bacaLIFO -> before;

bacaLIFO

Membaca (LIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaLIFO<>NULL)

// fungsi menampilkan

bacaLIFO = bacaLIFO -> before;

bacaLIFO

Membaca (LIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaLIFO<>NULL)

// fungsi menampilkan

bacaLIFO = bacaLIFO -> before;

bacaLIFO

Membaca (LIFO)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (bacaLIFO<>NULL)

// fungsi menampilkan

bacaLIFO = bacaLIFO -> before;

bacaLIFO

Mencari Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari = head;

cari

Mencari Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (cari->nama!=nama3)

cari = cari -> next;

cari

Mencari Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (cari->nama!=nama3)

cari = cari -> next;

cari

Mencari Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (cari->nama!=nama3)

cari = cari -> next;

cari

Menghapus Simpul Tertentu (Simpul Depan)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari = head;

cari

Menghapus Simpul Tertentu (Simpul Depan)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari = head;

if(cari->nama==nama1)

head=head->next;

cari

Menghapus Simpul Tertentu (Simpul Depan)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari = head;

if(cari->nama==nama)

head=head->next;

head->before=NULL;

cari NULL

Menghapus Simpul Tertentu (Simpul Depan)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari = head;

if(cari->nama==nama)

head=head->next;

head->before=NULL;

free(cari);

cari NULL

Menghapus Simpul Tertentu (Simpul Depan)

nama4

nrp4

before

NULL

tailhead

next

nama2

nrp2

before

next

nama3

nrp3

before

next

cari = head;

if(cari->nama==nama)

head=head->next;

head->before=NULL;

free(cari);

NULL

Menghapus Simpul Tertentu (Simpul Akhir)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari=tail;

cari

Menghapus Simpul Tertentu (Simpul Akhir)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

tail=tail->before;

cari

Menghapus Simpul Tertentu (Simpul Akhir)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

tail=tail->before;

tail->next=NULL;

cari

Menghapus Simpul Tertentu (Simpul Akhir)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

tail=tail->before;

tail->next=NULL;

free(cari);

cari

Menghapus Simpul Tertentu (Simpul Akhir)

NULL

tail

nama1

nrp1

before

head

next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari=head;

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

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

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

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

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

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

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari->before->next=cari->next;

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

cari->next->before=cari->before;

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

free(cari);

cari

Menghapus Simpul Tertentu (Di Tengah)

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

nextNULL

atau

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

while (cari->nama!=nama3)

cari = cari -> next;

sbl=cari->before;

stl=cari->next;

carisbl stl

Menghapus Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

sbl->next=stl;

carisbl stl

Menghapus Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

sbl->next=stl; stl->before=sbl;

carisbl stl

Menghapus Simpul Tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

nextNULL

cari->before->next = cari->next;

cari->next->before = cari->before;

free(cari);

Menyisipkan sebagai simpul pertama

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

Menyisipkan sebagai simpul pertama

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->before=NULL;

NULL

Menyisipkan sebagai simpul pertama

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->next=head;

NULL

Menyisipkan sebagai simpul pertama

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

next

namax

nrpx

before

sisip

next

head->before=sisip;

NULL

Menyisipkan sebagai simpul pertama

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

next

namax

nrpx

before

sisip

next

head=sisip;

NULL

Menyisipkan stl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

Menyisipkan stl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

stl=head;

while(stl->nama!=nama3)

stl=stl->next;

stl

Menyisipkan stl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->before=stl;

stl

Menyisipkan stl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->before=stl;

sisip->next=stl->next;

stl

Menyisipkan stl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->before=stl;

sisip->next=stl->next;

stl->next->before=sisip;

stl

Menyisipkan stl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->before=stl;

sisip->next=stl->next;

stl->next->before=sisip;

stl->next=sisip;

stl

Menyisipkan sbl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

Menyisipkan sbl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sbl=head;

while(sbl->nama!=nama3)

sbl=sbl->next;

sbl

Menyisipkan sbl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->next=sbl;

sbl

Menyisipkan sbl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->next=sbl;

sisip->before=sbl->before;

sbl

Menyisipkan sbl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->next=sbl;

sisip->before=sbl->before;

sbl->before->next=sisip;

sbl

Menyisipkan sbl. simpul tertentu

nama4

nrp4

before

NULL

tail

nama1

nrp1

before

head

next next

nama2

nrp2

before

next

nama3

nrp3

before

nextNULL

namax

nrpx

before

sisip

next

sisip->next=sbl;

sisip->before=sbl->before;

sbl->before->next=sisip;

sbl->before=sisip;

sbl

top related