Anda di halaman 1dari 18

Laporan Praktikum

Algoritma Pemrograman

Modul IX
“DOUBLE LNKED LIST CIRCULAR”

Nama : Yusron Rizky Putra


NIM : 20102209
Kelas : S1-IF-08F
Dosen Pengampu :
M. Afrizal Amrustian, S.Kom, M.Kom

PROGRAM STUDI S1 TEKNIK INFORMATIKA


FAKULTAS INFORMATIKA
INSTITUT TEKNOLOGITELKOM PURWOKERTO
2021
BAB I
TUJUAN PRAKTIKUM

Tujuan praktikum :
1. Memahami konsep pada dlcc.
2. Mengetahui apa fungsi dari dlcc.
3. Memahami cara menggunakan dlcc.
4. Memahami karakteristik pada dlcc.
5. Dapat menerapkan dlcc pada bahasa pemrograman C++.
6. Mampu menyelesaikan suatu permasalahn pada dlcc.
BAB II
DASAR TEORI

Circular artinya pointer next dan prev-nya menunjuk ke dirinya sendiri. Jadi, double
linked list circular (DLLC) adalah linked list dengan menggunakan pointer, dimana setiap node
memiliki 3field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk
pointer sebelumnya (prev), serta 1 field yang berisi data dengan pointer next dan prev nya
menunjuk ke dirinya sendiri secara circular.

Gambar double linked list cilcular :

Deklarasi node :

class Node{int data;


Node next;
Node prev;
}

Pada Operasi Double Linked List terdapat 6 Operasi, yaitu :

• Insert Kiri
• Insert Kanan
• Insert Tengah
• Delete Kiri
• Delete Kanan
• Delete Tengah.
BAB III
PEMBAHASAN MATERI

#include <iostream>

using namespace std;

typedef struct TNode{


int data;
TNode *next;
TNode *prev;
};

TNode *head;

int isEmpty(){
if(head == NULL)
return 1;
else
return 0;
}

void tambahDepan (){


TNode *baru, *bantu;
int data_baru;
//pointer bantu untuk menunjuk node terakhir
baru = new TNode;
cout << "masukan nilai : ";
cin >> data_baru;
baru -> data = data_baru;
baru -> next = baru;
baru -> prev = baru;

if(isEmpty()==1){
head = baru;
head -> next = head;
head -> prev = head;
}else{
bantu = head -> prev;
baru -> next = head;
head -> prev = baru;
head = baru;
head -> prev = bantu;
bantu -> next = head;
}
cout<<"Data masuk"<<endl;
}

void inserttengah ()
{
TNode *baru, *bantu, *bantu2;
baru = new TNode;
int value, cari;
cout << "masukan data : ";
cin >> value;
cout << "masukan posisi : ";
cin >> cari;
baru->data=value;

bantu = head;
int nomor = 1;
while(nomor < cari-1) { // perulangan untuk mendapatkan posisi
bantu = bantu->next;
nomor++;
}

bantu2 =bantu->next;
baru->next =bantu2;
bantu2->prev=baru;
bantu->next = baru;
baru->prev = bantu;
cout << "data masuk \n";
}

void tambahBelakang(){
TNode *baru, *bantu;
int data_baru;
cout << "masukan nilai : ";
cin >> data_baru;
//pointer bantu untuk menunjuk node terakhir
baru = new TNode;
baru -> data = data_baru;
baru -> next = baru;
baru -> prev = baru;

if(isEmpty()==1){
head = baru;
head -> next = head;
head -> prev = head;
}else{
bantu = head -> prev;
bantu -> next = baru;
baru -> prev = bantu;
baru -> next = head;
head -> prev = baru;
}
cout<<"Data masuk"<<endl;
}

void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
do{
cout<<bantu -> data<<" ";
bantu = bantu -> next;
}while(bantu != head);
}else cout<<"Data masih kosong";
}

void hapusDepan(){
TNode *hapus, *bantu;
int d;
if(isEmpty()==0){
if(head -> next != head){
hapus = head;
d = hapus -> data;
bantu = head -> prev;
head = head -> next;
bantu -> next = head;
head -> prev = bantu;
delete hapus;
}else{
d = head -> data;
head = NULL;
}
cout<<"Data terhapus"<<endl;
}else cout<<"Data masih kosong"<<endl;
}

void hapusBelakang(){
TNode *hapus, *bantu;
int d;
if(isEmpty()==0){
if(head -> next != head){
bantu = head;
while(bantu -> next -> next != head){
bantu = bantu -> next;
}
hapus = bantu -> next;
d = hapus -> data;
bantu -> next = head;
delete hapus;
}else{
d = head -> data;
head = NULL;
}
cout<<"Data terhapus"<<endl;
}else cout<<"Data masih kosong"<<endl;
}

int main()
{
int pilih;
do{
system("pause");
system("cls");
cout << "1. insert depan " << endl;
cout << "2. insert tengah " << endl;
cout << "3. insert belakang " << endl;
cout << "4. hapus depan " << endl;
cout << "5. hapus belakang " << endl;
cout << "6. cetak " << endl;
cout << "7. keluar" << endl;

cout << "masukan pilihan : ";


cin >> pilih;

switch(pilih) {
case 1:
tambahDepan();
break;
case 2:
inserttengah();
break;
case 3 :
tambahBelakang();
break;
case 4:
hapusDepan();
break;
case 5:
hapusBelakang();
break;
case 6 :
tampil();
break;
default:
break;
}

}while(pilih != 7);

return 0;
}
➔ Tugas nomer 1 :

Insert depan
• Pertama deklarasikan node baru dan memasukan data ke node baru
• Pointer next dan prev dari node baru mengarah ke node baru itu sendiri
• Masuk ke percabangan jika isEmpty bernilai true, maka head = baru dan
pointer next dan prev dari head mengarah ke head itu sendiri
• Jika kondisi tidak memenuhi, maka bantu = head → prev
• Pointer next dari baru = head, dan pointer prev dari head = baru
• Head = baru, lalu pointer prev dari head = bantu, pointer next dari bantu =
head

Insert belakang
• Pertama deklarasikan node baru dan memasukan data ke node baru
• Pointer next dan prev dari node baru mengarah ke node baru itu sendiri
• Masuk ke percabangan jika isEmpty bernilai true, maka head = baru dan
pointer next dan prev dari head mengarah ke head itu sendiri
• Jika kondisi tidak memenuhi, maka bantu = head → next
• Pointer next dari bantu = baru, lalu pointe rprev dari baru = bantu
• Pointer next dari baru = head, lalu pointer prev dari head = baru

Delete depan
• Deklarasi int d, lalu masuk percabangan jika head → next != head maka
• Hapus = head, lalu d = hapus→ data, lalu bantu = head prev, lalu bantu = head next
• Pointer next dari bantu = head, dan pointer prev dari head = bantu
• Delete hapus

Delete belakang
• Deklarasi int d, lalu masuk percabangan apakah isempty bernilai true
• Lalu beri nilai bantu dengan head, abis itu perulangan untuk menggeser
posisi dari bantu
• Lalu hapus = bantu → next, dan d = hapus → data
• Pointer next dari bantu = head, lalu delete hapus
➔ Tugas no.2 :

//Yusron Rizky Putra


//20102209
//S1IF08F
//Jawaban no.2 DLLC

#include <iostream>
using namespace std;
typedef struct TNode{
int data;
TNode *next;
TNode *prev;
};
TNode *head;
int isEmpty(){
if(head == NULL)
return 1;
else
return 0;
}
void tambahDepan (){
TNode *baru, *bantu;
int data_baru;
//pointer bantu untuk menunjuk node terakhir
baru = new TNode;
cout << "masukan nilai : ";
cin >> data_baru;
baru -> data = data_baru;
baru -> next = baru;
baru -> prev = baru;
if(isEmpty()==1){
head = baru;
head -> next = head;
head -> prev = head;
}else{
bantu = head -> prev;
baru -> next = head;
head -> prev = baru;
head = baru;
head -> prev = bantu;
bantu -> next = head;
}
cout<<"Data masuk"<<endl;
}
void tambahBelakang(){
TNode *baru, *bantu;
int data_baru;
cout << "masukan nilai : ";
cin >> data_baru;
//pointer bantu untuk menunjuk node terakhir
baru = new TNode;
baru -> data = data_baru;
baru -> next = baru;
baru -> prev = baru;
if(isEmpty()==1){
head = baru;
head -> next = head;
head -> prev = head;
}else{
bantu = head -> prev;
bantu -> next = baru;
baru -> prev = bantu;
baru -> next = head;
head -> prev = baru;
}
cout<<"Data masuk"<<endl;
}
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
do{
cout<<bantu -> data<<" ";
bantu = bantu -> next;
}while(bantu != head);
}else cout<<"Data masih kosong";
}
void hapusDepan(){
TNode *hapus, *bantu;
int d;
if(isEmpty()==0){
if(head -> next != head){
hapus = head;
d = hapus -> data;
bantu = head -> prev;
head = head -> next;
bantu -> next = head;
head -> prev = bantu;
delete hapus;
}else{
d = head -> data;
head = NULL;
}
cout<<"Data terhapus"<<endl;
}else cout<<"Data masih kosong"<<endl;
}
void hapusBelakang(){
TNode *hapus, *bantu;
int d;
if(isEmpty()==0){
if(head -> next != head){
bantu = head;
while(bantu -> next -> next != head){
bantu = bantu -> next;
}
hapus = bantu -> next;
d = hapus -> data;
bantu -> next = head;
delete hapus;
}else{
d = head -> data;
head = NULL;
}
cout<<"Data terhapus"<<endl;
}else cout<<"Data masih kosong"<<endl;
}
int main()
{
int pilih;
do{
system("pause");
system("cls");
cout << "1. insert depan " << endl;
cout << "2. insert belakang " << endl;
cout << "3. hapus depan " << endl;
cout << "4. hapus belakang " << endl;
cout << "5. cetak " << endl;
cout << "6. keluar" << endl;
cout << "masukan pilihan : ";
cin >> pilih;
switch(pilih) {
case 1:
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3:
hapusDepan();
break;
case 4:
hapusBelakang();
break;
case 5 :
tampil();
break;
default:
break;
}
}while(pilih != 6);
return 0;
}
Hasil Run :
➔ Tugas No.3 :

//Yusron Rizky Putra


//20102209
//S1IF0DF

#include <iostream>
using namespace std;
typedef struct TNode{
int data;
TNode *next;
TNode *prev;
};
TNode *head;
int isEmpty(){
if(head == NULL)
return 1;
else
return 0;
}
void tambahDepan (){
TNode *baru, *bantu;
int data_baru;
//pointer bantu untuk menunjuk node terakhir
baru = new TNode;
cout << "masukan nilai : ";
cin >> data_baru;
baru -> data = data_baru;
baru -> next = baru;
baru -> prev = baru;
if(isEmpty()==1){
head = baru;
head -> next = head;
head -> prev = head;
}else{
bantu = head -> prev;
baru -> next = head;
head -> prev = baru;
head = baru;
head -> prev = bantu;
bantu -> next = head;
}
cout<<"Data masuk"<<endl;
}
void inserttengah ()
{
TNode *baru, *bantu, *bantu2;
baru = new TNode;
int value, cari;
cout << "masukan data : ";
cin >> value;
cout << "masukan posisi : ";
cin >> cari;
baru->data=value;
bantu = head;
int nomor = 1;
while(nomor < cari-1) { // perulangan untuk mendapatkan posisi
bantu = bantu->next;
nomor++;
}
bantu2 =bantu->next;
baru->next =bantu2;
bantu2->prev=baru;
bantu->next = baru;
baru->prev = bantu;
cout << "data masuk \n";
}
void tambahBelakang(){
TNode *baru, *bantu;
int data_baru;
cout << "masukan nilai : ";
cin >> data_baru;
//pointer bantu untuk menunjuk node terakhir
baru = new TNode;
baru -> data = data_baru;
baru -> next = baru;
baru -> prev = baru;
if(isEmpty()==1){
head = baru;
head -> next = head;
head -> prev = head;
}else{
bantu = head -> prev;
bantu -> next = baru;
baru -> prev = bantu;
baru -> next = head;
head -> prev = baru;
}
cout<<"Data masuk"<<endl;
}
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
do{
cout<<bantu -> data<<" ";
bantu = bantu -> next;
}while(bantu != head);
}else cout<<"Data masih kosong";
}
void hapusDepan(){
TNode *hapus, *bantu;
int d;
if(isEmpty()==0){
if(head -> next != head){
hapus = head;
d = hapus -> data;
bantu = head -> prev;
head = head -> next;
bantu -> next = head;
head -> prev = bantu;
delete hapus;
}else{
d = head -> data;
head = NULL;
}
cout<<"Data terhapus"<<endl;
}else cout<<"Data masih kosong"<<endl;
}
void hapusBelakang(){
TNode *hapus, *bantu;
int d;
if(isEmpty()==0){
if(head -> next != head){
bantu = head;
while(bantu -> next -> next != head){
bantu = bantu -> next;
}
hapus = bantu -> next;
d = hapus -> data;
bantu -> next = head;
delete hapus;
}else{
d = head -> data;
head = NULL;
}
cout<<"Data terhapus"<<endl;
}else cout<<"Data masih kosong"<<endl;
}
int main()
{
int pilih;
do{
system("pause");
system("cls");
cout << "1. insert depan " << endl;
cout << "2. insert tengah " << endl;
cout << "3. insert belakang " << endl;
cout << "4. hapus depan " << endl;
cout << "5. hapus belakang " << endl;
cout << "6. cetak " << endl;
cout << "7. keluar" << endl;
cout << "masukan pilihan : ";
cin >> pilih;
switch(pilih) {
case 1:
tambahDepan();
break;
case 2:
inserttengah();
break;
case 3 :
tambahBelakang();
break;
case 4:
hapusDepan();
break;
case 5:
hapusBelakang();
break;
case 6 :
tampil();
break;
default:
break;
}
}while(pilih != 7);
return 0;
}

Hasil run :
BAB IV
DAFTAR PUSTAKA

1. https://bundet.com/d/693-pengertian-double-linked-list

2. https://desijas.blogspot.com/2020/06/doubly-linked-list.html

Anda mungkin juga menyukai