Download - Double Linked List
Double Linked List
Entin Martiana
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. Deklarasi
2. Memory allocation
3. Mengisi data
4. 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
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;
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
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(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