Anda di halaman 1dari 28

Tugas Pendahuluan 7

PRAKTIKUM STRUKTUR DATA

“ Heaps, Priority Queue”

ASISTEN :

1. Ansar
2. Niswa Ayu Lestari

OLEH :
Nama : Riangdana Jurmasari
Nim : 60900121012
Kelas : A

LABORATORIUM KOMPUTER TERPADU

JURUSAN SISTEM INFORMASI

FAKULTAS SAINS DAN TEKNOLOGI

UNIVERSITAS ISLAM NEGERI ALAUDDIN MAKASSAR

2022
Soal
1. Buatlah sebuah antrian prioritas dengan menggunakan
pendekatan array sebagai kontainer antrian.

2. Pelajari antrian pada praktikum pertemuan


sebelumnya kemudian kembangkanlah program antrian
tersebut menjadi antrian prioritas.

3. Buatlah program antrian Deque dengan prioritas.

Jawaban :
1. #include <iostream>
#include <string>
#include <queue>
using namespace std;
priority_queue<string> pq1;
string s1 = string("pulpen"), s2 = string("pensil"), s3 = string("buku latihan"), s4 =
string("buku catatan"), s5 = string("penghapus");

int main(){
pq1.push(s1); pq1.push(s2); pq1.push(s3); pq1.push(s4); pq1.push(s5);
while(!pq1.empty())
{
cout << pq1.top() << " "<<endl;
pq1.pop();

} cout<<'\n';
};
Output :

2. #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
struct node
{
string namaM;
int nim;
struct node *link;
};
class Priority_Queue
{
private:
node *front;

public:

Priority_Queue()
{
front = NULL;
}
void insert(string nama, int nimm)
{
node *tmp, *q;
tmp = new node;
tmp->namaM = nama;
tmp->nim = nimm;
if (front == NULL || nimm > front->nim)
{
tmp->link = front;
front = tmp;
}
else
{
q = front;
while (q->link != NULL && q->link->nim >= nimm)
q = q->link;
tmp->link = q->link;
q->link = tmp;
}
}
void del()
{
node *tmp;
if (front == NULL)
cout << "ANTRIAN KOSONG\n";
else
{
tmp = front;
cout << "MENGELUARKAN : " << tmp->namaM << endl;
front = front->link;
free(tmp);
}
}
void display()
{
node *ptr;
ptr = front;
if (front == NULL)
cout << "ANTRIAN KOSONG\n";
else
{
cout << "ANTRIAN :\n";
cout << "=====================" << endl;
cout << "NIM NAMA\n";
cout << "=====================" << endl;
while (ptr != NULL)
{
cout << ptr->nim << " " << ptr->namaM << endl;
ptr = ptr->link;
}
}
}
};
int main()
{
int choice, nim;
string nama;
Priority_Queue pq;
do
{
cout << "=====================" << endl;
cout << "1.QUEUE\n";
cout << "2.DEQUE\n";
cout << "3.DISPLAY\n";
cout << "4.Quit\n";
cout << "=====================" << endl;
cout << "PILIH[1-4] : ";
cin >> choice;
switch (choice)
{
case 1:
cout << "MASUKKAN NAMA : ";
cin >> nama;
cout << "MASUKKAN NIM : ";
cin >> nim;
pq.insert(nama, nim);
break;
case 2:
pq.del();
break;
case 3:
pq.display();
break;
case 4:
break;
default:
cout << "PILIHAN TIDAK ADA\n";
}
} while (choice != 4);
return 0;
}
Output :
3. #include <iostream>

using namespace std;

struct Node

int data, p;

Node *next;

};

struct Node *f = NULL;

struct Node *r = NULL;

void enqueue(int d, int pr)

Node *tmp, *q;

tmp = new Node;

tmp->data = d;

tmp->p = pr;

if (r == NULL || pr > r->p)

tmp->next = r;

r = tmp;
}

else

q = r;

while (q->next != NULL && q->next->p >= pr)

q = q->next;

tmp->next = q->next;

q->next = tmp;

void display()

Node *temp = r;

while (temp != NULL)

cout << "\tNO PASIAN : " << temp->data << " STADIUM : " << temp->p
<< endl;

temp = temp->next;

void dequeue()

Node *temp = new Node;

if (r == NULL)

{
cout << "ANTRIAN KOSONG\n";

return;

else

temp = r;

r = r->next;

cout << "\n\t----------------------------------------";

cout << "\n\tMEMANGGIL PASIEN: " << temp->data << "


\nDIPRIORITASKAN KARENA STADIUM " << temp->p;

cout << "\n\t----------------------------------------\n";

free(temp);

int main()

int qdata, qprior, choice, numberOfElements;

cout << "\n\t\t_________OPERATE PRIORITY DEQUEU_________\n\n";

cout << "\t1. QUEUE.\n\t2. Display.\n\t3. DEQUEU ELEMEN


TERBESAR\n\t0. Exit\n\n";

do

cout << "\n\tPILIH[0-3] : ";

cin >> choice;


switch (choice)

case 1:

cout << "\n\tMASUKKAN NOMER PASIEN : ";

cin >> numberOfElements;

cout << "\n\tPRIOTAS: ";

cin >> qprior;

enqueue(numberOfElements, qprior);

break;

case 2:

cout << "\t_____________________\n\n";

display();

cout << "\t_____________________\n";

cout << "\n\n";

break;

case 3:

dequeue();

break;

default:

cout << "\nEXIT \n\n";

break;

} while (choice != 0);


return 0;

Output
Soal
1. Buatlah sebuah struktur data hash table menggunakan fungsi lain
selain modulus untuk memetakan key-value.
2. Buatlah sebuah struktur data hash table untuk memetakan data
mahasiswa dan alamat mahasiswa. Gunakan array sebagai
container data.

jawaban :

1. #include <iostream>
#include <list>
using namespace std;

class HashTable
{
int capacity;
list<int> *table;

public:
HashTable(int V);
void insertItem(int key, int data);
void deleteItem(int key);
int checkPrime(int n)
{
int i;
if (n == 1 || n == 0)
{
return 0;
}
for (i = 2; i < n / 2; i++)
{
if (n % i == 0)
{
return 0;
}
}
return 1;
}
int getPrime(int n)
{
if (n % 2 == 0)
{
n++;
}
while (!checkPrime(n))
{
n += 2;
}
return n;
}

int hashFunction(int key)


{
return (key % capacity);
}
void displayHash();
};
HashTable::HashTable(int c)
{
int size = getPrime(c);
this->capacity = size;
table = new list<int>[capacity];
}
void HashTable::insertItem(int key, int data)
{
int index = hashFunction(key);
table[index].push_back(data);
}

void HashTable::deleteItem(int key)


{
int index = hashFunction(key);

list<int>::iterator i;
for (i = table[index].begin();
i != table[index].end(); i++)
{
if (*i == key)
break;
}

if (i != table[index].end())
table[index].erase(i);
}
void HashTable::displayHash()
{
for (int i = 0; i < capacity; i++)
{
cout << "table[" << i << "]";
for (auto x : table[i])
cout << " --> " << x;
cout << endl;
}
}
int main()
{
int key[] = {231, 321, 212, 321, 433, 262};
int data[] = {123, 432, 523, 43, 423, 111};
int size = sizeof(key) / sizeof(key[0]);
HashTable h(size);
for (int i = 0; i < size; i++)
h.insertItem(key[i], data[i]);
h.deleteItem(12);
h.displayHash();
}
2. #include <iostream>
using namespace std;
int hashing[5];
// elemen hashing dari 1-5
string dataMhs(string nama,string alamat);
void inisialisasi()
{
for (int i = 1; i <= 5; i++)
{
hashing[i] = -1;
}
}
int cek_kosong()
{
int kosong = 0;
for (int i = 1; i <= 5; i++)
{
if (hashing[i] == -1)
kosong++;
}
if (kosong != 0)
return 1;
else
return 0;
}
int pengacak()
{
int acak;
lagi:
acak = rand() % 6;
if (acak == 0)
goto lagi;
return acak;
}
void input(int input)
{
int indeks;
if (cek_kosong() == 0)
{
cout <<"Tempat penyimpan data penuh\n";
}
else
{
indeks = pengacak();
acak:
if (hashing[indeks] != -1)
{
cout <<"= Terjadi tabrakan pada indeks : "<< indeks <<"\n";
if (indeks == 5)
{
indeks = 1;
cout <<"= Karena indeks = 5 maka indeks dikembalikan ke 1\n";
goto acak;
}
else
{
indeks++;
cout <<"= Tambah indeks menjadi "<< indeks << endl;
}
goto acak;
}
else
{
hashing[indeks] = input;
cout <<"= Data masuk pada indeks "<< indeks << endl;
}
}
}
void searching(int cari)
{
int temu = 0;
for (int i = 1; i <= 5; i++)
{
if (hashing[i] == cari)
temu = 1;
}
if (temu == 1){
cout <<"= Data ditemukan\n";
}
else
cout <<"= Data tidak ditemukan\n";
}
void hapus(int hapus)
{
int del = 0;
for (int i = 1; i <= 5; i++)
{
if (hashing[i] == hapus)
{
del = 1;
hashing[i] = -1;
}
}
if (del == 0)
cout <<"= Data tidak ada\n";
else
cout <<"= Data terhapus\n";
}
void tampil()
{
for (int i = 1; i <= 5; i++)
{
cout <<"= Indeks ke "<< i <<" : ";
if (hashing[i] != -1){
cout << hashing[i] << endl;
}
else
cout <<"kosong\n";
}
}
string dataMhs(string nama,string alamat){
cout << "Masukkan Nama Mahasiswa :";
cin >> nama;
cout << "Masukkan Alamat Mahasiswa :";
cin >> alamat;
return nama;
}
int main()
{
inisialisasi();
int pilihan, data;
string namaMhs,alamatMhs;
do
{
menu:
system("cls");
cout <<"========================\n";
cout <<"= =\n";
cout <<"= PROGRAM HASH TABLE =\n";
cout <<"= =\n";
cout <<"========================\n";
cout <<"= =\n";
cout <<"= 1.Input data =\n";
cout <<"= 2.Searching data =\n";
cout <<"= 3.Delete data =\n";
cout <<"= 4.Tampilkan data =\n";
cout <<"= 5.Keluar =\n";
cout <<"= =\n";
cout <<"========================\n";
cout <<"= Pilihan : ";
cin >> pilihan;
switch (pilihan) {
case 1:
cout <<"= Masukkan data(harus positif) : ";
cin >> data;
dataMhs(namaMhs,alamatMhs);
if (data < 0)
{
cout <<"= Data tidak boleh negatif\n";
cout <<"=\n= ";
system("pause");
goto menu;
}
input(data);
cout <<"=\n= ";
system("pause");
break;
case 2:
cout <<"= Masukkan data yang dicari : ";
cin >> data;
cout << namaMhs << endl;
cout << alamatMhs << endl;
searching(data);
system("pause");
break;
case 3:
cout <<"= Masukkan data yang dihapus : ";
cin >> data;
hapus(data);
cout <<"=\n= ";
system("pause");
break;
case 4:
tampil();
cout <<"=\n= ";
system("pause");
break;
}
} while (pilihan != 5);
}
Tugas Pendahuluan 8

PRAKTIKUM STRUKTUR DATA

“ Hash Table ”

ASISTEN :

1. Ansar
2. Niswa Ayu Lestari

OLEH :
Nama : Riangdana Jurmasari
Nim : 60900121012
Kelas : A

LABORATORIUM KOMPUTER TERPADU

JURUSAN SISTEM INFORMASI

FAKULTAS SAINS DAN TEKNOLOGI

UNIVERSITAS ISLAM NEGERI ALAUDDIN MAKASSAR

2022

Anda mungkin juga menyukai