Anda di halaman 1dari 22

TUGAS 7

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA


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

1. Setelah deklarasi node dilakukan, dan semua fungsi sudah tersedia. Sekarang gabungkan
setiap fungsi yang ada pada sebuah program penuh dengan spesifikasi:
➢ Pada program utama (main) berisi sebuah menu yang bersifat fitur-fitur yang
terdapat dari setiap fungsi yang sudah ada sebelumnya, yaitu: tambahan data, hapus
data, cek data kosong, cetak semua data.
➢ Pada struct hanya terdapat 1 tipe data saja yaitu integer.
➢ Sesuaikan fungsi-fungsi yang ada dengan program yang anda buat (jangan langsung
copy-paste dan digunakan.
a. Source Code
#include <iostream>

#include <stdio.h>

#include <iomanip>

using namespace std;

typedef struct node

long data;

node* next; //tipe data bertipe sama untuk menunjuk ke node lain

node* prev;

};

//buat variable node

node* head;

node* tail;

node* print;

node* del;

node* entry;
void inisialisasi()

head = NULL;

tail = NULL;

int isEmpty()

if(head == NULL)

return 1;

else

return 0;

void input(int *dta)

entry = new node;

entry->data = *dta;

entry->next = NULL;

entry->prev = NULL;

if(isEmpty()==1)

head = entry;

head->next = NULL;

head->prev = NULL;

tail=head;

else

tail->next = entry;

entry->prev = tail;

tail = entry;

}
//penghapusan data di belakang melalui head

void hapus()

int simpan;

if(head!=NULL) //jika hanya kondisi ini saja maka akan terjadi error karena ada syntax head-
>prev = NULL

if(head->next != NULL)

del=head;

simpan = head->data;

cout << "\n" <<simpan<< " telah dihapus" << endl;

head = head->next;

head -> prev = NULL;

delete del;

else

simpan = head->data;

cout << "\n" <<simpan<< " telah dihapus" << endl;

head = NULL;

else

cout << "\nLinked List kosong penghapusan tidak dapat dilakukan " <<endl;

void cetak() //menampilkan semua data

print = head;

if(head!=NULL)

while(print!=NULL)
{

cout << "\n\t" <<print->data; //cetak data pada setiap node

print = print->next;

else

cout << "\nTidak ada data dalam linked list" <<endl; //jika data sudah kosong

void menu()

char pilih, ulang;

int data;

do

system("clear");

menu :

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

cout << "DOUBLE LINKED LIST" <<endl;

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

cout << "Menu: ";

cout << "\n1. Entry/Masukkan/Input Data";

cout << "\n2. Hapus Data";

cout << "\n3. Cetak Data";

cout << "\n4. Keluar";

cout << "\nMasukkan pilihan anda : ";

cin >> pilih;

switch(pilih)

case '1' :

cout << "\nMasukkan data : ";

cin >> data;


input(&data);

cout << "\n" <<data<<" Telah di tambahkan" <<


endl;

break;

case '2' :

hapus();

break;

case '3' :

cetak();

break;

case '4' :

cout << "\nTerima kasih" << endl;

exit;

break;

default :

cout << "\nPilih ulang" << endl;

goto menu;

cout << "\nKembali ke menu? (Y/N)";

cin >> ulang;

}while(ulang=='Y' || ulang == 'Y');

int main()

inisialisasi();

menu();

return 0;

b. Deskripsi code
typedef struct node Deklarasi Node :
{ Node*next sebagai tipe data bertipe sama
untuk menunjukkan ke node lain.
long data;

node* next; //tipe data bertipe


sama untuk menunjuk ke node lain

node* prev;

};

int isEmpty() Untuk mengecek kosong tidaknya linked


{ list.

if(head == NULL)

return 1;

else

return 0;

void input(int *dta) Untuk memasukan data/menginput data.


{

entry = new node;

entry->data = *dta;

entry->next = NULL;

entry->prev = NULL;

if(isEmpty()==1)

head = entry;

head->next = NULL;

head->prev = NULL;

tail=head;

else

tail->next = entry;

entry->prev = tail;

tail = entry;

}
}

void hapus() Untuk menghapus inputan yang sudah


{ disimpan.

int simpan;

if(head!=NULL) //jika hanya kondisi ini


saja maka akan terjadi error karena ada syntax
head->prev = NULL

if(head->next != NULL)

del=head;

simpan = head->data;

cout << "\n"


<<simpan<< " telah dihapus" << endl;

head = head->next;

head -> prev = NULL;

delete del;

else

simpan = head->data;

cout << "\n" <<simpan<< " telah


dihapus" << endl;

head = NULL;

else

cout << "\nLinked List kosong penghapusan


tidak dapat dilakukan " <<endl;

void cetak() //menampilkan semua data Untuk menampilkan semua data yang telah
{ ditambahkan.

print = head;
if(head!=NULL)

while(print!=NULL)

cout << "\n\t" <<print-


>data; //cetak data pada setiap node

print = print->next;

else

cout << "\nTidak ada data dalam linked


list" <<endl; //jika data sudah kosong

void inisialisasi() Untuk insialisasi awal, fungsi ini harus ada


{ untuk memunculkan node awal.

head = NULL;

tail = NULL;

c. Screenshot
2. Buat program untuk enkripsi dan deskripsi password yang memanfaatkan linked list, dengan
spesifikasi :
• Panjang password min 6 digit.
• Isi password terserah dari user dan password di inputkan terlebih dahulu sebelumnya
(penambahan data di belakang).
• Enkripsi dilakukan dengan memindahkan 3 node terakhir menjadi node terdepan.
Kemudian sisipkan 1 karakter baru (kunci) setelah node ketiga dari yang di pindahkan
tsb.
• Ilustrasi

• Lakukan juga proses deskripsinya.


• Berikan juga fitur untuk menampilkan password.

a. Source Code

#include <iostream>

#include <string.h>

#include <windows.h>

#include <conio.h>

#include <stdlib.h>

using namespace std;

struct node{

char data;

node *next, *prev;

}*head, *tail;

void init()

head = NULL;

bool isEmpty ()

if (head == NULL)

return true;
else

return false;

void insertDepan(char isi){

node *baru;

baru = new node;

baru -> data = isi;

baru -> next = NULL;

baru -> prev = NULL;

if (isEmpty())

head = baru;

tail = baru;

tail -> next = NULL;

head -> prev = NULL;

} else {

baru -> next = head;

head -> prev = baru;

head = baru;

head -> prev = NULL;

void insertBelakang (char value)

node *baru;

baru = new node;


baru -> data = value;

baru -> next = NULL;

baru -> prev = NULL;

if ( isEmpty())

head = baru;

tail = baru;

tail -> next = NULL;

head -> prev = NULL;

} else {

tail -> next = baru;

baru -> prev = tail;

tail = baru;

tail -> next = NULL;

void deleteDepan()

node *hapus;

if(isEmpty())

cout << "List kosong\n";

} else {

if (head ->next != NULL)

hapus = head;

head = head -> next;

head -> prev = NULL;


delete hapus;

} else {

head = NULL;

void deleteBelakang ()

node *hapus;

if (isEmpty())

cout << "List kosong\n";

} else {

if (head -> next != NULL)

hapus = tail;

tail = tail -> prev;

tail -> next = NULL;

delete hapus;

} else {

head = NULL;

void cetak ()

node *bantu = head;

if (isEmpty())
{

cout << "List kosong\n";

} else {

while (bantu != NULL)

cout << bantu -> data;

bantu = bantu -> next;

cout << endl;

void enkripsi(char key, char arrayy[3]){

insertDepan(key);

for (int i=2;i>=0;i--){

deleteBelakang();

insertDepan(arrayy[i]);

void dekripsi(char arrayy[4]){

for (int i=0;i<4;i++)

deleteDepan();

for (int i=0;i<3;i++)

insertBelakang(arrayy[i]);

int main()

init();

int pil;
menu :

cout << "MENU\n";

cout << "1. Encrypt\n2. Decrypt\n3. Exit\n";

cout << "Masukkan pilihan (1-2) : ";

cin >> pil;

switch (pil)

char password [20], kunci, simpan[3];

case 1 :

int jumlah, n, pil;

cout << "Masukkan password yang akan di enskripsi : ";

cin >> password;

jumlah = strlen(password);

n = 0;

if (jumlah < 6)

cout << "Password Minimal 6 Digit\n";

system("pause");

system("cls");

goto menu;

} else {

for (int i=0; i<jumlah; i++)

insertBelakang(password[i]);

if(i >= (jumlah-3))


{

simpan[n] = password[i];

n++;

kunci = '@';

enkripsi(kunci,simpan);

cout << "\nEnkripsi Password : ";

cetak();

system("pause");

system("cls");

goto menu;

break;

case 2 :

cout << "Masukkan password yang akan di deskripsi : ";

cin >> password;

jumlah = strlen(password);

n = 0;

if (jumlah < 6)

cout << "Password Minimal 7 Digit\n";

system("pause");

system("cls");

goto menu;

} else {

for (int i=0; i<jumlah; i++)

insertBelakang(password[i]);

simpan[n] = password[i];
n++;

dekripsi(simpan);

cout << "\nDekripsi Password : ";

cetak();

system("pause");

system("cls");

goto menu;

break;

case 3 :

system("exit");

return 0;

b. Deskripsi code

struct node{ Mendeklarasikan node,dengan head


menggunakan satu pointer head yang harus
char data;
selalu menunjuk pada node pertama.
node *next, *prev;

}*head, *tail;

void init() Fungsi untuk insialisasi awal, fungsi ini harus


ada untuk memunculkan node awal.
{

head = NULL;

bool isEmpty () Untuk mengecek kosong tidaknya linked list

{
if (head == NULL)

return true;

else

return false;

void insertDepan(char isi){ Penambahan data di depan.


Pembentukan node baru.
node *baru;

baru = new node; Pemberian nilai terhadap data baru


Data pertama harus menunjukkan ke NULL
baru -> data = isi;

baru -> next = NULL;

baru -> prev = NULL;

if (isEmpty()) Head selalu berada didepan

head = baru;

tail = baru;

tail -> next = NULL;

head -> prev = NULL;

} else { Jika linked list sudah ada datanya


baru -> next = head;
Node baru dihubungkan ke node baru
head -> prev = baru; Head harus selalu ada di depan
head = baru;

head -> prev = NULL;

void insertBelakang (char value) Penambahan data di belakang

node *baru; Pembentukan node baru

baru = new node;


Pemberian nilai terhadap data baru
baru -> data = value;
Data pertama harus menunjukkan ke NULL
baru -> next = NULL; Data pertama harus menunjuk ke NULL

baru -> prev = NULL;

Jika linked list kosong


if ( isEmpty())

{
Head harus barada di depan
head = baru;

tail = baru;

tail -> next = NULL;

head -> prev = NULL;

} else {

tail -> next = baru;

baru -> prev = tail;

tail = baru;

tail -> next = NULL;

void deleteDepan() Penghapusan data di depan

node *hapus;

if(isEmpty()) Jika data belum kosong,

cout << "List kosong\n";

} else {
Jika data masih lebih dari Saturday
if (head ->next != NULL)

{
Letakkan hapus pada head
hapus = head;
head = head -> next; Menggeser head, karena head harus di
depan
head -> prev = NULL;
head menuju ke NULL
delete hapus; proses delete tidak boleh dilakukan jika
node masih ditunjuk oleh pointer
} else { jika data tinggal head
head = NULL; langsung diberi nilai NULL saja

void deleteBelakang () Penghapusan data di belakang

node *hapus;

if (isEmpty()) Jika data belum kosong

cout << "List kosong\n";

} else {
Jika data masih lebih dari satu
if (head -> next != NULL)

{
Menghubungkan node akhir
hapus = tail;

tail = tail -> prev;

tail -> next = NULL;

delete hapus;

} else {

head = NULL;

void cetak () Menampilkan semua data


{
Letakan bantu pada head
node *bantu = head;

if (isEmpty())

cout << "List kosong\n";

} else {

while (bantu != NULL)

cout << bantu -> data; Cetak data pada setiap node

bantu = bantu -> next;


Geser bantu hingga akhir
}

cout << endl;

c. Screenshot

Anda mungkin juga menyukai