Anda di halaman 1dari 20

Nama : Ishika Nur Aisyah Erdiani

NIM : 21103047
Kelas : SI-05-B

1. Buatlah program dengan menerapkan struktur data double linked list non-circular, yang
memiliki fungsi tambah data depan, fungsi tambah data setelah/sesudah data tertentu, fungsi
tambah data belakang, fungsi hapus data setelah/sesudah data tertentu, serta fungsi tampil data
dengan urutan tampil dari belakang. Data yang diolah adalah data buku yang terdiri dari judul,
jenis buku, pengarang, penerbit, tebal halaman, harga. (Masukkan data minimal 3 data)

 [5] fungsi tambah data depan,


 [5] fungsi tambah data setelah/sesudah data tertentu,
 [5] fungsi tambah data belakang,
 [5] fungsi hapus data setelah/sesudah data tertentu,
 [5] fungsi tampil data dengan urutan tampil dari belakang
 [5] Contoh dengan minimal 3 data
 [5] Structnya benar

Syntax Program :
#include <iostream>

using namespace std;

int pilihan;

string data_masuk;

bool keluar=false;

char ya_tidak;

struct dlinkedlist{

dlinkedlist* prev;

string data;

dlinkedlist* next;
};

dlinkedlist* head;

dlinkedlist* tail;

dlinkedlist* simpul;

void inisialisasi(){

head = NULL;

tail = NULL;

bool dLinkKosong(){

if(head == NULL && tail == NULL){

return true;

}else{

return false;

void tambahDepan(string dataUser){

if(dLinkKosong() == true){

simpul = new dlinkedlist;

simpul->data = dataUser;

simpul->prev = NULL;

simpul->next = NULL;

head = simpul;

tail = simpul;

}else{

simpul = new dlinkedlist;


simpul ->data = dataUser;

simpul ->prev = NULL;

simpul ->next = NULL;

simpul ->next = head;

head->prev = simpul;

head = simpul;

void tambahBelakang(string dataUser){

if(dLinkKosong()== true){

simpul = new dlinkedlist;

simpul->data = dataUser;

simpul->prev = NULL;

simpul->next = NULL;

head = simpul;

tail = simpul;

}else{

simpul = new dlinkedlist;

simpul->data = dataUser;

simpul->prev = NULL;

simpul->next = NULL;

tail->next = simpul;

simpul->prev = tail;

tail = simpul;

}
}

void hapusDepan(){

if(dLinkKosong() == true){

cout<<"Kosong...!!!"<<endl;

}else{

dlinkedlist* helper;

helper = head;

if(head == tail){

head = NULL;

tail = NULL;

delete helper;

}else{

head = head->next;

head->prev = NULL;

helper->next = NULL;

delete helper;

void hapusBelakang(){

if(dLinkKosong() == true){

cout<<"Kosong...!!!"<<endl;

}else{

if(head == tail){

dlinkedlist* helper;
helper = head;

head = NULL;

tail = NULL;

delete helper;

}else{

dlinkedlist* helper;

helper = tail;

tail = tail->prev;

tail->next = NULL;

helper->prev = NULL;

delete helper;

void tampilData(){

if(dLinkKosong() == true){

cout<<"Kosong...!!!"<<endl;

}else{

dlinkedlist* helper;

helper = head;

while(helper != NULL){

cout<<helper->data<<" ";

helper = helper->next;

}
}

int main()

inisialisasi();

do{

system("cls");

cout<<"||DOUBLE LINKEDLIST||"<<endl;

cout<<"----------------------"<<endl;

cout<<"1.Tambah Depan"<<endl;

cout<<"2.Tambah Belakang"<<endl;

cout<<"3.Hapus Depan"<<endl;

cout<<"4.Hapus Belakang"<<endl;

cout<<"5.Tampil Data LinkedList"<<endl;

cout<<"6.Keluar"<<endl;

cout<<endl;

cout<<"Silahkan Masukkan Pilihan Anda (1-6) : ";

cin>>pilihan;

cout<<endl;

switch(pilihan){

case 1 :

cout<<"Anda memilih memasukkan tambah data depan"<<endl;

cout<<"Masukkan data : ";

cin>>data_masuk;

tambahDepan(data_masuk);
cout<<endl;

cout<<"Keluar (y/t) ? ";

cin>>ya_tidak;

if(ya_tidak == 'y' || ya_tidak == 'Y'){

cout<<" Jumpa kembali "<<endl;

keluar = true;

}else{

system("cls");

break;

case 2 :

cout<<"Anda memilih memasukkan tambah data belakang"<<endl;

cout<<"Masukkan data : ";

cin>>data_masuk;

tambahBelakang(data_masuk);

cout<<endl;

cout<<"Keluar (y/t) ? ";

cin>>ya_tidak;

if(ya_tidak == 'y' || ya_tidak == 'Y'){

cout<<" Jumpa kembali "<<endl;

keluar = true;

}else{

system("cls");

break;
case 3 :

cout<<"Berhasil menghapus data depan"<<endl;

hapusDepan();

cout<<endl;

cout<<"Keluar (y/t) ? ";

cin>>ya_tidak;

if(ya_tidak == 'y' || ya_tidak == 'Y'){

cout<<" Jumpa kembali "<<endl;

keluar = true;

}else{

system("cls");

break;

case 4 :

cout<<"Berhasil menghapus data belakang"<<endl;

hapusBelakang();

cout<<endl;

cout<<"Keluar (y/t) ? ";

cin>>ya_tidak;

if(ya_tidak == 'y' || ya_tidak == 'Y'){

cout<<" Jumpa kembali "<<endl;

keluar = true;

}else{

system("cls");

}
break;

case 5 :

cout<<"Data yang disimpan :"<<endl;

tampilData();

cout<<endl;

cout<<"Keluar (y/t) ? ";

cin>>ya_tidak;

if(ya_tidak == 'y' || ya_tidak == 'Y'){

cout<<" Jumpa kembali "<<endl;

keluar = true;

}else{

system("cls");

break;

case 6 :

cout<<"Keluar (y/t) ? ";

cin>>ya_tidak;

if(ya_tidak == 'y' || ya_tidak == 'Y'){

cout<<" Jumpa kembali "<<endl;

keluar = true;

}else{

system("cls");

break;

default :
cout<<"Tidak ada menu pilihan lain lagi!"<<endl;

while(keluar==false);

return 0;

Hasil Program :
2. Buatlah matrik repsentasi serta program untuk mencari lintasan terpendek dari semua
pasangan simpul yang terdapat pada digraph dibawah.

a. [10] Matriks representasi graph (berbobot dan berarah)


A B C D E F G
A 0 5 0 2 0 0 0
B 6 0 0 7 0 5 0
C 0 3 0 0 0 2 0
D 9 0 3 0 7 0 0
E 0 0 4 0 0 0 0
F 0 12 0 0 0 0 8
G 0 0 0 6 2 0 0

b. [20] Program

#include <iostream>

#include <string>

using namespace std;

int jumlahSimpul,terkecil;

string *dataSimpul;

int **dataBusur;

bool cekMatrik = false;


void buatMatriks()

dataSimpul = new string[jumlahSimpul];

dataBusur = new int*[jumlahSimpul];

dataBusur[0] = new int[jumlahSimpul * jumlahSimpul];

for(int i = 1; i < jumlahSimpul; i++){

dataBusur[i] = dataBusur[i-1] + jumlahSimpul;

cout<<"Silahkan masukkan nama simpul "<<endl;

for(int i = 0; i < jumlahSimpul; i++){

cout<<"Data "<<i+1<<" : ";

cin>>dataSimpul[i];

cout<<"Silahkan masukkan bobot antar simpul "<<endl;

for(int baris = 0; baris < jumlahSimpul; baris++){

for(int kolom = 0; kolom < jumlahSimpul; kolom++){

cout<<dataSimpul[baris]<<" --> "<<dataSimpul[kolom]<<" : ";

cin>> dataBusur[baris][kolom];

cekMatrik = true;

void busurterpendek(){
terkecil= dataBusur[0][0];

for(int baris = 0 ; baris < jumlahSimpul; baris++){

for(int kolom = 0; kolom < jumlahSimpul; kolom++){

if(dataBusur[baris][kolom]<terkecil&&terkecil!=0){

terkecil=dataBusur[baris][kolom];

cout<<terkecil;

//Tampilkan hasil

void tampilGraph(){

cout<<"-->>";

for(int kolom = 0; kolom < jumlahSimpul; kolom++){

cout<<dataSimpul[kolom]<<" ";

cout<<endl;

for(int baris = 0; baris < jumlahSimpul; baris++){

cout<<dataSimpul[baris]<<" | ";

for(int kolom = 0; kolom < jumlahSimpul; kolom++){

cout<<busurterpendek[baris][kolom]<<" ";

cout<<endl;

}
//prosedur tampil matriks

void tampilMatriks()

if(cekMatrik){ //jika matriks terdapat nilai

for(int i = 0; i < jumlahSimpul; i++){

cout<<dataSimpul[i]<<" ";

cout<<endl;

for(int baris = 0; baris < jumlahSimpul; baris++){

for(int kolom = 0; kolom < jumlahSimpul; kolom++){

cout<<dataBusur[baris][kolom]<<" ";

cout<<endl;

}else{

cout<<"Tidak ada matriks"<<endl;

int main()

cout<<"Silahkan masukkan jumlah data : ";

cin>>jumlahSimpul;

buatMatriks();

tampilMatriks();
cout<<endl<<endl;

cout<<"Busur terpendek :"<<endl;

busurterpendek();

return 0;

Hasil Program
3. Terdapat struktur data pohon seperti berikut :

1) Isilah setiap node dengan huruf dari nama lengkap Anda (gambar ulang struktur data
pohonnya) dengan ketentuan
 Node 1 diisi oleh huruf pertama nama Anda, node 2 diisi oleh huruf kedua nama
Anda, dan seterusnya.
 Tidak perlu menyertakan spasi
 Jika jumlah huruf nama Anda kurang dari 10 maka lakukan perulangan huruf
contoh : ABU BAKR → ABUBAKRABU
2) Lakukan penelusuran dengan metode penelusuran In-Order (sertakan langkah-langkah)

3) Buatlah programnya untuk melakukan penelusuran dengan metode In-Order (saja) dari
pohon yang dibuat.

#include <iostream>
using namespace std;

//inisialisasi struct
struct pohon{
pohon* kanan;
string data;
pohon* kiri;
};

//deklarasi variabel pointer


pohon* simpul; //menjadi simpul/node (ketika memasukkan simpul/node
baru)
pohon* root; //menunjukkan data paling awal (akar)
pohon* saatIni;
pohon* helperA;
pohon* helperB;
pohon* alamat[256];

//deklarasi awal (inisialisasi)


void insialisasi(){
root = NULL;
}

//prosedur simpul baru


void simpulBaru(char dataMasukkan){
simpul = new pohon; //simpul = objek baru dari pohon
simpul->data = dataMasukkan;//A
simpul->kanan = NULL;
simpul->kiri = NULL;
}//digunakan untuk membuat simpul baru

//prosedur simpul akar


void simpulAkar(){
if(root == NULL){ //jika pointer kosong
char dataAnda;
cout<<"Silahkan masukkan data : ";
cin>>dataAnda;//B
simpulBaru(dataAnda);
root = simpul;
cout<<"Root terbentuk..."<<endl;
}else{ //jika pointer tidak kosong
cout<<"Root sudah ada..."<<endl;
}
}//digunakan untuk membuat root (simpul akar)

//prosedur tambah simpul


void tambahSimpul(){
if(root != NULL){
int i, j, penanda;
char dataUser;
i = 1; j = 1; penanda = 0;
alamat[i] = root;
while(penanda == 0 && j < 256){
cout<<"Masukkan data kiri : ";
cin>>dataUser; //B
if(dataUser != 'X'){ //'X' = memberhentikan program (dpt diganti dgn yg
lain)
simpulBaru(dataUser);
saatIni = alamat[i];
saatIni->kiri = simpul;
j++; // j = 2
alamat[j] = simpul; // alamat simpul B
}else{
penanda = 1;
j++;
alamat[j] = NULL;
}
if(penanda == 0){
cout<<"Masukkan data kanan : ";
cin>>dataUser; // C
if(dataUser != '0'){
simpulBaru(dataUser);
saatIni = alamat[i];
saatIni->kanan = simpul;
j++; //3
alamat[j] = simpul; // alamat simpul C
}else{
penanda = 1;
j++;
alamat[j] = NULL;
}
}
i++;
}
}
}
//prosedur baca pohon
void bacaPohon(){
if(root != NULL){
int i, n, pencacah;
i = 1;
n = 1;
pencacah = 0;
cout<<endl;
while(alamat[i] != NULL){
saatIni = alamat[i];
cout<<saatIni->data<<" ";
pencacah++;//1
if(pencacah == n){
cout<<endl;
pencacah = 0;
n = n*2;
}
i++;
}
}
}
void telusurInOrder(pohon *asal){
if(asal != NULL){
telusurInOrder(asal->kiri);
cout<<asal->data<<" ";
telusurInOrder(asal->kanan);
}
}
void telusurInOrderNR(pohon *asal){
int top;
pohon* s[256];
pohon* p;
top = -1;
p = asal;
do{
while(p != NULL){
top++;
s[top] = p;
p = p->kiri;
}
if(top > -1){
p = s[top];
top--;
cout<<p->data<<" ";
p = p->kanan;
}
}while((top > -1) || (p != NULL));
}
int main()
{
simpulAkar();
tambahSimpul();
bacaPohon();
cout<<endl;
cout<<"Hasil InOrder :"<<endl;
helperA = root;
telusurInOrder(helperA);
cout<<endl;
cout<<"Hasil non rekursif InOrder :"<<endl;
helperA = root;
telusurInOrderNR(helperA);
cout<<endl;

return 0;
}

Hasil Proragm :

Anda mungkin juga menyukai