Double Linked List Entin Martiana

Download Report

Transcript Double Linked List Entin Martiana

Double Linked List
Entin Martiana
Operasi Double Linked List
•
•
•
•
•
•
Membangun Double Linked List
Membaca list, dalam dua arah.
Mencari simpul tertentu
Menghapus simpul tertentu
Menyisipkan sebagai simpul pertama
Menyisipkan simpul di tengah
Double Linked List
0
head
1
2
3
4
tail
Deklarasi
struct simpul
{
char nama[25];
int nrp;
struct simpul *before; data
struct simpul *next;
pointer yg menunjuk simpul
};
sebelumnya
pointer yg menunjuk simpul
berikutnya
struct simpul *baru;
simpul
nama
nrp
before
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?
baru
1.
2.
3.
4.
5.
struct simpul *baru;
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(pertama)
{
baru->before=NULL;
baru
nama1
nrp1
NULL
before
next
nama1
nrp1
before
next
Bagaimana?
baru
1.
2.
3.
4.
5.
struct simpul *baru;
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(pertama)
{
baru->before=NULL;
baru->next=NULL;
baru
nama1
nrp1
NULL
before
next
NULL
nama1
nrp1
before
next
Bagaimana?
baru
1.
2.
3.
4.
5.
struct simpul *baru;
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(pertama)
{
baru->before=NULL;
baru->next=NULL;
head=baru;
head
baru
nama1
nrp1
NULL
before
next
NULL
nama1
nrp1
before
next
Bagaimana?
baru
1.
2.
3.
4.
5.
struct simpul *baru;
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama :");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(pertama)
{
baru->before=NULL;
baru->next=NULL;
head = baru;
tail = baru;
}
head
baru
tail
nama1
nrp1
NULL
before
next
NULL
nama1
nrp1
before
next
Selanjutnya
1.
2.
3.
4.
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(bukanpertama)
{
baru->next=NULL;
head
NULL
baru
tail
nama1
nama2
nrp1
nrp2
before
before
next
next
NULL
NULL
baru
nama2
nrp2
before
next
Selanjutnya
1.
2.
3.
4.
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(bukanpertama)
{
baru->next=NULL;
tail->next=baru;
head
NULL
baru
tail
nama1
nama2
nrp1
nrp2
before
before
next
next
NULL
baru
nama2
nrp2
before
next
Selanjutnya
1.
2.
3.
4.
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(bukanpertama)
{
baru->next=NULL;
tail->next=baru;
baru->before=tail;
head
NULL
baru
tail
nama1
nama2
nrp1
nrp2
before
before
next
next
NULL
baru
nama2
nrp2
before
next
Selanjutnya
1.
2.
3.
4.
baru=(struct simpul*)malloc(sizeof(struct simpul));
printf("Nama
:");scanf("%s",&baru->nama);
printf("NRP :");scanf("%d",&baru->nrp);
if(j<>0)
{
baru->next=NULL;
tail->next=baru;
baru->before=tail;
tail=baru;
tail
}
head
NULL
nama1
nama2
nrp1
nrp2
before
before
next
next
NULL
baru
nama2
nrp2
before
next
Sampai iterasi keempat
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
Membaca (FIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaFIFO
bacaFIFO = head;
Membaca (FIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaFIFO
while (bacaFIFO!=NULL)
// fungsi menampilkan
bacaFIFO = bacaFIFO -> next;
Membaca (FIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaFIFO
while (bacaFIFO<>NULL)
// fungsi menampilkan
bacaFIFO = bacaFIFO -> next;
Membaca (FIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaFIFO
while (bacaFIFO<>NULL)
// fungsi menampilkan
bacaFIFO = bacaFIFO -> next;
Membaca (FIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaFIFO
while (bacaFIFO<>NULL)
// fungsi menampilkan
bacaFIFO = bacaFIFO -> next;
Membaca (LIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaLIFO
bacaLIFO = tail;
Membaca (LIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaLIFO
while (bacaLIFO<>NULL)
// fungsi menampilkan
bacaLIFO = bacaLIFO -> before;
Membaca (LIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaLIFO
while (bacaLIFO<>NULL)
// fungsi menampilkan
bacaLIFO = bacaLIFO -> before;
Membaca (LIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaLIFO
while (bacaLIFO<>NULL)
// fungsi menampilkan
bacaLIFO = bacaLIFO -> before;
Membaca (LIFO)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
bacaLIFO
while (bacaLIFO<>NULL)
// fungsi menampilkan
bacaLIFO = bacaLIFO -> before;
Mencari Simpul Tertentu
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari = head;
Mencari Simpul Tertentu
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
while (cari->nama!=nama3)
cari = cari -> next;
Mencari Simpul Tertentu
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
while (cari->nama!=nama3)
cari = cari -> next;
Mencari Simpul Tertentu
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
while (cari->nama!=nama3)
cari = cari -> next;
Menghapus Simpul Tertentu (Simpul Depan)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari = head;
Menghapus Simpul Tertentu (Simpul Depan)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari = head;
if(cari->nama==nama1)
head=head->next;
Menghapus Simpul Tertentu (Simpul Depan)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
NULL
cari = head;
if(cari->nama==nama)
head=head->next;
head->before=NULL;
Menghapus Simpul Tertentu (Simpul Depan)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
NULL
cari = head;
if(cari->nama==nama)
head=head->next;
head->before=NULL;
free(cari);
Menghapus Simpul Tertentu (Simpul Depan)
head
tail
nama2
nama3
nama4
nrp2
nrp3
nrp4
before
before
before
next
next
next
NULL
NULL
cari = head;
if(cari->nama==nama)
head=head->next;
head->before=NULL;
free(cari);
Menghapus Simpul Tertentu (Simpul Akhir)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari=tail;
Menghapus Simpul Tertentu (Simpul Akhir)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
tail=tail->before;
Menghapus Simpul Tertentu (Simpul Akhir)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
tail=tail->before;
tail->next=NULL;
cari
Menghapus Simpul Tertentu (Simpul Akhir)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
tail=tail->before;
tail->next=NULL;
free(cari);
cari
Menghapus Simpul Tertentu (Simpul Akhir)
head
NULL
tail
nama1
nama2
nama3
nrp1
nrp2
nrp3
before
before
before
next
next
next
NULL
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari=head;
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
while (cari->nama!=nama3)
cari = cari -> next;
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
while (cari->nama!=nama3)
cari = cari -> next;
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
while (cari->nama!=nama3)
cari = cari -> next;
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari->before->next=cari->next;
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
cari->next->before=cari->before;
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
cari
free(cari);
Menghapus Simpul Tertentu (Di Tengah)
head
NULL
tail
nama1
nama2
nama4
nrp1
nrp2
nrp4
before
before
before
next
next
next
NULL
atau
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sbl
while (cari->nama!=nama3)
cari = cari -> next;
sbl=cari->before;
stl=cari->next;
cari
stl
Menghapus Simpul Tertentu
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sbl
sbl->next=stl;
cari
stl
Menghapus Simpul Tertentu
head
NULL
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sbl
sbl->next=stl;
stl->before=sbl;
cari
stl
Menghapus Simpul Tertentu
head
NULL
tail
nama1
nama2
nama4
nrp1
nrp2
nrp4
before
before
before
next
next
next
NULL
cari->before->next = cari->next;
cari->next->before = cari->before;
free(cari);
Menyisipkan sebagai simpul pertama
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
namax
nrpx
before
next
Menyisipkan sebagai simpul pertama
tail
head
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
NULL
sisip
namax
nrpx
before
NULL
next
sisip->before=NULL;
Menyisipkan sebagai simpul pertama
tail
head
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
NULL
sisip
namax
nrpx
before
NULL
next
sisip->next=head;
Menyisipkan sebagai simpul pertama
tail
head
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
namax
nrpx
before
NULL
next
head->before=sisip;
Menyisipkan sebagai simpul pertama
tail
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
namax
nrpx
before
NULL
next
head
head=sisip;
Menyisipkan stl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
namax
nrpx
before
next
Menyisipkan stl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
stl
stl=head;
while(stl->nama!=nama3)
stl=stl->next;
sisip
namax
nrpx
before
next
Menyisipkan stl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
stl
sisip->before=stl;
sisip
namax
nrpx
before
next
Menyisipkan stl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
stl
sisip->before=stl;
sisip->next=stl->next;
sisip
namax
nrpx
before
next
Menyisipkan stl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
stl
sisip->before=stl;
sisip->next=stl->next;
stl->next->before=sisip;
sisip
namax
nrpx
before
next
Menyisipkan stl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
stl
sisip->before=stl;
sisip->next=stl->next;
stl->next->before=sisip;
stl->next=sisip;
sisip
namax
nrpx
before
next
Menyisipkan sbl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
namax
nrpx
before
next
Menyisipkan sbl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
sbl=head;
while(sbl->nama!=nama3)
sbl=sbl->next;
namax
nrpx
before
next
sbl
Menyisipkan sbl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
sisip->next=sbl;
namax
nrpx
before
next
sbl
Menyisipkan sbl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
sisip->next=sbl;
sisip->before=sbl->before;
namax
nrpx
before
next
sbl
Menyisipkan sbl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
sisip->next=sbl;
sisip->before=sbl->before;
sbl->before->next=sisip;
namax
nrpx
before
next
sbl
Menyisipkan sbl. simpul tertentu
tail
head
NULL
nama1
nama2
nama3
nama4
nrp1
nrp2
nrp3
nrp4
before
before
before
before
next
next
next
next
NULL
sisip
sisip->next=sbl;
sisip->before=sbl->before;
sbl->before->next=sisip;
sbl->before=sisip;
namax
nrpx
before
next
sbl