Anda di halaman 1dari 21

TUGAS 08

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA


Nama : Yesika Rizki Fanita Lumban Raja
Kelas : S1-IF-07-E
NIM : 19102109

1. Buat program lengkap dari potongan-potongan program yang ada diatas! Buat agar menjadi
seperti menu.
2. Buat program untuk memasukkan node baru tetapi diantara node yang sudah ada. Tentukan node
yang baru akan berada pada antrian keberapa.
3. Buatlah program untuk memasukan node baru tetapi diantara node yang sudah ada. Tentukan
node yang baru akan berada pada antrian ke berapa.
Jawab:
Double Linked List Circular adalah linked list yang memiliki 2 pointer yaitu pointer “next” dan
pointer “prev”, dimana kedua pointer tersebut menunjuk kedirinya sendiri secara circular sehingga
membentuk suatu lingkaran.
Double Linked List Circular pointer “next” dan “prev” nya menunjuk ke dirinya sendiri secara
circular.
a. Source code

#include <iostream>

#include <windows.h>

using namespace std;

struct node{

int data;

node *next, *prev;

}*head=NULL; //inisialisasi linked list

int isEmpty(){ //mengecek apakah linked kosong atau tidak

if(head == NULL) return 1;

else return 0;

void insertDepan(int newdata){ //prosedur untuk menambahkan data didepan

node *baru, *bantu;

baru = new node;

baru->data = newdata;

baru->next = baru;

baru->prev = baru;

if(isEmpty()){
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;

void insertBelakang(int newdata){ //prosedur untuk menambahkan data dibelakang

node *baru, *bantu;

baru = new node;

baru->data = newdata;

baru->prev = baru;

baru->next = baru;

if(isEmpty()){

head = baru;

head->next = head;
head->prev = head;

} else {

bantu = head->prev;

bantu->next = baru;

baru->prev = bantu;

baru->next = head;

head->prev = baru;

void tampil(){ ////prosedur untuk menampilkan isi linked list

node *bantu;

if(isEmpty()){

cout << "List Kosong";

} else {

bantu = head;

do{

cout << bantu->data << " ";

bantu = bantu->next;

}while(bantu != head);

cout << endl;

}
void hapusDepan(){ //prosedur untuk menghapus data didepan

node *hapus, *bantu;

int a;

if(isEmpty()){

cout << "List Kosong";

} else {

if(head->next != head){

hapus = head;

a = head->data;

bantu = head->prev;

head = head->next;

bantu->next = head;

head->prev = bantu;

delete hapus;

} else {

head = NULL;

cout << a << " terhapus\n";

void hapusBelakang(){ //prosedur untuk menghapus data dibelakang

node *hapus, *bantu;


int a;

if(isEmpty()){

cout << "List Kosong";

} else {

if(head->next != NULL){

bantu = head->prev->prev;

hapus = head->prev;

bantu->next = head;

head->prev = bantu;

a = hapus->data;

delete hapus;

} else {

head = NULL;

cout << a << " terhapus\n";

void tambahTengah(int value, int cari){ //prosedur menambahkan data di


tengah(setelah data yang dicari di dalam linked list)

node *baru, *bantu, *bantu2;

baru = new node;

baru->data = value;
baru->next = baru;

baru->prev = baru;

bantu = head;

while(bantu->data != cari){

bantu = bantu->next;

bantu2 = bantu->next;

baru->next = bantu2;

bantu2->prev = baru;

bantu->next = baru;

baru->prev = bantu;

cout << "Data Masuk\n";

int main()

int pil, cari, data;

do{

cout << "1. Tambah Depan\n";

cout << "2. Tambah Belakang\n";

cout << "3. Tampil\n";


cout << "4. Hapus Depan\n";

cout << "5. Hapus Belakang\n";

cout << "6. Tambah Tengah\n";

cout << "7. Exit\n\n";

cout << "Masukkan Pilihan : "; cin >> pil;

switch(pil){

case 1:

cout << "Tambah Depan\n";

cout << "Masukkan data : "; cin >> data;

insertDepan(data);

system("pause");

system("cls");

break;

case 2:

cout << "Tambah Belakang\n";

cout << "Masukkan data : "; cin >> data;

insertBelakang(data);

system("pause");

system("cls");

break;

case 3:

tampil();

system("pause");
system("cls");

break;

case 4:

hapusDepan();

system("pause");

system("cls");

break;

case 5:

hapusBelakang();

system("pause");

system("cls");;

break;

case 6:

cout << "Tambah Tengah\n";

cout << "Cari : "; cin >> cari;

cout << "Data : "; cin >> data;

tambahTengah(data, cari);

system("pause");

system("cls");

break;

}while(pil != 7);

return 0;

}
b. Deskripsi code

using namespace std; Deskripsi code yang digunakan / inisialisasi


linked list.
struct node{

int data;

node *next, *prev;

}*head=NULL;

int isEmpty(){ Mengecek apakah linked kosong atau


if(head == NULL) return 1; tidak.

else return 0;
}

void insertDepan(int Prosedur untuk menambahkan data


newdata){ node *baru, *bantu; didepan.

baru = new node;


baru->data = newdata;
baru->next = baru;
baru->prev = baru;

if(isEmpty()){
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;
}
}
void insertBelakang(int newdata){ Prosedur untuk menambahkan data
node *baru, *bantu; dibelakang.

baru = new node;


baru->data = newdata;
baru->prev = baru;
baru->next = baru;

if(isEmpty()){
head = baru;
head->next = head;
head->prev = head;
} else {
bantu = head->prev;
bantu->next = baru;
baru->prev = bantu;
baru->next = head;
head->prev = baru;
}
}

void tampil(){ Prosedur untuk menampilkan isi linked list.


node *bantu;
if(isEmpty()){
cout << "List Kosong";
} else {
bantu = head;
do{
cout << bantu->data << "
";
bantu = bantu->next;
}while(bantu != head);
cout << endl;
}
}

void hapusDepan(){ Prosedur untuk menghapus data didepan.


node *hapus, *bantu;

int a;
if(isEmpty()){
cout << "List Kosong";
} else {
if(head->next != head){
hapus = head;
a = head->data;
bantu = head->prev;
head = head->next;
bantu->next = head;
head->prev = bantu;
delete hapus;
} else {
head = NULL;
}
cout << a << " terhapus\n";
}
}

void hapusBelakang(){ Prosedur untuk menghapus data


node *hapus, *bantu; dibelakang.

int a;
if(isEmpty()){
cout << "List Kosong";
} else {
if(head->next != NULL){
bantu = head->prev->prev;
hapus = head->prev;
bantu->next = head;
head->prev = bantu;
a = hapus->data;
delete hapus;
} else {
head = NULL;
}
cout << a << " terhapus\n";
}
}

void tambahTengah(int value, int Prosedur menambahkan data di


cari){ tengah(setelah data yang dicari di dalam
node *baru, *bantu, *bantu2; linked list.
baru = new node;

baru->data = value;
baru->next = baru;
baru->prev = baru;
bantu = head;

while(bantu->data != cari){
bantu = bantu->next;
}
bantu2 = bantu->next;
baru->next = bantu2;
bantu2->prev = baru;
bantu->next = baru;
baru->prev = bantu;

cout << "Data Masuk\n";


}
int main() Mendeklarasikan int pil, cari dan data.
{
int pil, cari, data;

do{ Merupakan tampilan atau output pada


cout << "1. Tambah menu. Dan didalam code ini memakai
perulangan switch case.
Depan\n";
cout << "2. Tambah
Belakang\n";
cout << "3. Tampil\n";
cout << "4. Hapus Depan\n";
cout << "5. Hapus
Belakang\n";
cout << "6. Tambah
Tengah\n";
cout << "7. Exit\n\n";
cout << "Masukkan Pilihan :
"; cin >> pil;

switch(pil){
case 1:
cout << "Tambah
Depan\n";
cout << "Masukkan data :
"; cin >> data;
insertDepan(data);
system("pause");
system("cls");
break;
case 2:
cout << "Tambah
Belakang\n";
cout << "Masukkan data :
"; cin >> data;
insertBelakang(data);
system("pause");
system("cls");
break;
case 3:
tampil();
system("pause");
system("cls");
break;
case 4:
hapusDepan();
system("pause");
system("cls");
break;
case 5:
hapusBelakang();
system("pause");
system("cls");;
break;
case 6:
cout << "Tambah
Tengah\n";
cout << "Cari : "; cin >>
cari;
cout << "Data : "; cin >>
data;
tambahTengah(data, cari);
system("pause");
system("cls");
break;
}
}while(pil != 7);
return 0;
}

c. Screenshot

Anda mungkin juga menyukai