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)
Syntax Program :
#include <iostream>
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(){
return true;
}else{
return false;
if(dLinkKosong() == true){
simpul->data = dataUser;
simpul->prev = NULL;
simpul->next = NULL;
head = simpul;
tail = simpul;
}else{
head->prev = simpul;
head = simpul;
if(dLinkKosong()== true){
simpul->data = dataUser;
simpul->prev = NULL;
simpul->next = NULL;
head = simpul;
tail = simpul;
}else{
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<<"6.Keluar"<<endl;
cout<<endl;
cin>>pilihan;
cout<<endl;
switch(pilihan){
case 1 :
cin>>data_masuk;
tambahDepan(data_masuk);
cout<<endl;
cin>>ya_tidak;
keluar = true;
}else{
system("cls");
break;
case 2 :
cin>>data_masuk;
tambahBelakang(data_masuk);
cout<<endl;
cin>>ya_tidak;
keluar = true;
}else{
system("cls");
break;
case 3 :
hapusDepan();
cout<<endl;
cin>>ya_tidak;
keluar = true;
}else{
system("cls");
break;
case 4 :
hapusBelakang();
cout<<endl;
cin>>ya_tidak;
keluar = true;
}else{
system("cls");
}
break;
case 5 :
tampilData();
cout<<endl;
cin>>ya_tidak;
keluar = true;
}else{
system("cls");
break;
case 6 :
cin>>ya_tidak;
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.
b. [20] Program
#include <iostream>
#include <string>
int jumlahSimpul,terkecil;
string *dataSimpul;
int **dataBusur;
cin>>dataSimpul[i];
cin>> dataBusur[baris][kolom];
cekMatrik = true;
void busurterpendek(){
terkecil= dataBusur[0][0];
if(dataBusur[baris][kolom]<terkecil&&terkecil!=0){
terkecil=dataBusur[baris][kolom];
cout<<terkecil;
//Tampilkan hasil
void tampilGraph(){
cout<<"-->>";
cout<<dataSimpul[kolom]<<" ";
cout<<endl;
cout<<dataSimpul[baris]<<" | ";
cout<<busurterpendek[baris][kolom]<<" ";
cout<<endl;
}
//prosedur tampil matriks
void tampilMatriks()
cout<<dataSimpul[i]<<" ";
cout<<endl;
cout<<dataBusur[baris][kolom]<<" ";
cout<<endl;
}else{
int main()
cin>>jumlahSimpul;
buatMatriks();
tampilMatriks();
cout<<endl<<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;
};
return 0;
}
Hasil Proragm :