STRUKTUR DATA
Disusun Oleh :
Randa Hendro Nurman
2016010044
SI.A/III
[ JENJANG STRATA I ]
[PRODI SISTEM INFORMASI KOMPUTER DAN JARINGAN]
SEKOLAH TINGGIH MANAJEMAN INFORMATIKA DAN KOMPUTER
BINA NUSANTARA JAYA LUBUK LKINGGAU
2018
KATA PENGANTAR
Assalamu’alaikum
Puji syukur atas kehadirat Allah SWT, atas segala rahmat dan karunia-
Nya sehingga saya mampu untuk menyelesaikan penyusunan laporan praktikum
mata kuliah “struktur data”.
Saya menyadari bahwa makalah ini masih jauh dari kesempurnaan. Untuk
itu para pembaca untuk memberikan masukan dan saran sehingga isi makalah ini
dapat lebih sempurna.
Wassalamu’alaikumWr. Wb.
KATA PENGANTAR.............................................................................................
DAFTAR ISI............................................................................................................
[4] Queue.................................................................................................................
[4] Ringkasan Materi................................................................................................
[5] Contoh Program..................................................................................................
[6] Penjelasan Program............................................................................................
[10] Sorting...............................................................................................................
[10] Ringkasan Materi...............................................................................................
[11] Contoh Program................................................................................................
[13] Penjelasan Program..........................................................................................
QUEUE
Ringkasan Teori :
queue adalah FIFO yang merupakan singkatan dari First In First Out,
artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data
tersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya
sama dengan antrian di sebuah loket pembelian tiket kereta, orang yang datang
lebih dahulu, maka akan dilayani terlbih dahulu, dan akan selesai lebih dulu dari
orang-orang yang datang setelahnya.
ypedef struct
{
int HEAD, TAIL;
int data[max+1];
}Queue;
dimana, nilai MAX didefinisikan sebagai jumlah tumpukan maksimum yang
dapat disimpan dalam queue. Setelah struktur data dari queue didefinisikan
dengan syntax di atas, maka setelah itu dapat dibuat variabel-variabel baru yang
mengacu pada tipe data Queue di atas, misalkan membuat sebuah variabel
bernama antrian yang bertipe Queue.
Contoh Program
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#define n 20
int q[n], f, r, x;
void awal()
{
f=0;
r=-1;
}
void insert()
{
if (r<n-1)
{
r=r+1;
q[r]=x;
}
else
{
cout<<"ANTRIAN PENUH";
}
}
void deleteq()
//hanya menampilkan satu data terdepan
//pakai while kalau mau menampilkan semua data antrian
{
if(f<r+1)
{
x=q[f];
f=f+1;
cout<<x;
atas:
cout<<endl<<"1. INSERT DATA"<<endl;
cout<<"2. DELETE DATA"<<endl;
cout<<"3. EXIT DATA"<<endl;
cout<<"MASUKKAN PILIHAN ANDA : ";
cin>>pilih;
switch(pilih)
{
case 1 :
if(r<n-1)
{
cout<<"MASUKKAN BILANGAN : ";
cin>>x;
insert();
}
else
{
cout<<"ANTRIAN PENUH";
}
goto atas;
break;
case 2 :
deleteq();
break;
case 3 :
exit;
break;
default :
cout<<"MASUKKAN ANGKA ANTARA 1 SAMPAI 3";
goto atas;
break;
}
getch();
}
Penjelasan Program
1 . Prosedur createEmpty
void createEmpty()
{
antrian.HEAD = 0;
antrian.TAIL = 0;
}
2. Prosedur enqueue
Prosedur ini digunakan untuk memasukkan sebuah data/ nilai ke dalam
queue. Sebelum sebuah data/ nilai dimasukkan ke dalam queue, maka prosedur ini
terlebih dahulu melakukan pengecekan terhadap posisi HEAD dan TAIL. Jika
posisi HEAD dan TAIL masih berada pada indeks ke-0 (artinya queue masih
kosong), maka prosedur ini akan menempatkan HEAD dan TAIL pada indeks ke-
1 terlebih dahulu, baru setelah itu memasukkan data/ nilai ke dalam array data
queue. Namun, jika posisi HEAD dan TAIL tidak berada pada posisi ke-0, maka
posisi TAIL yang akan dinaikkan satu level. Jadi, pada proses enqueue, TAIL-lah
yang berjalan seiring masuknya data baru ke dalam antrian, sedangkan HEAD
akan tetap pada posisi ke-1. Berikut deklarasi prosedur enqueue dalam Bahasa C:
void enqueue(int x)
{
if ((antrian.HEAD == 0) && (antrian.TAIL == 0))
{
antrian.HEAD = 1;
antrian.TAIL = 1;
}
else
{
antrian.TAIL = antrian.TAIL + 1;
}
antrian.data[antrian.TAIL] = x;
}
3. Prosedur dequeue
void Dequeue(){
if (q.head > q.tail) {
q.head = 0;
q.tail = 0;
}
q.head = q.head + 1;
}
4. Fungsi IsEmpty
Sama seperti fungsinya pada stack, fungsi ini berfungsi untuk melakukan
pengecekan terhadap queue, apakah queue tersebut kosong atau tidak. Jika queue
tersebut kosong (artinya, HEAD dan TAIL berada pada posisi 0, atau bisa juga
ketika HEAD > TAIL), maka fungsi akan mengembalikan nilai 1 (true), tetapi
jika queue tersebut tidak kosong/ berisi (artinya, HEAD dan TAIL tidak berada
pada posisi 0), maka fungsi akan mengembalikan nilai 0 (false). Berikut deklarasi
fungsi IsEmpty dalam Bahasa C:
int IsEmpty()
{
if ((antrian.HEAD> antrian.TAIL) || (antrian.HEAD == 0) &&
(antrian.TAIL == 0))
return 1;
else
return 0;
}
5. Fungsi IsFull
int IsFull()
{
if (antrian.TAIL == max)
return 1;
else
return 0;
}
SORTING
Ringkasan Teori :
Pengurutan data dalam struktur data sangat penting terutama untuk data yang
beripe data numerik ataupun karakter. Pengurutan dapat dilakukan secara
ascending (urut naik) dan descending (urut turun). Pengurutan (Sorting) adalah
proses pengurutan data yang sebelumnya disusun secara acak sehingga tersusun
secara teratur menurut aturan tertentu.
Contoh:
Data Acak :
5 6 8 1 3 25 10
Ascending : 1 3 5 6 8 10 25
Descending : 25 10 8 6 5 3 1
Pada dasarnya ada dua macam urutan yang biasa digunakan dalam suatu
proses sorting:
1. Urut naik (ascending) Mengurutkan dari data yang mempunyai nilai paling
kecil sampai paling besar.
2. Urut turun (descending) Mengurutkan dari data yang mempunyai nilai paling
besar sampai paling kecil.
#include <iostream.h>
int main()
{
int data[10];
int i, j, k, tmp, jumlah=0;
cout<<"PROGRAM PENGURUTAN BILANGAN BUBBLE SORT\n\n";
cout<<"Masukkan jumlah bilangan : "; cin>>k;
for(i=0; i<k; i++)
{
cout<<"Masukkan Angka ke "<<(i+1)<<" : ";
cin>>data[i];
if(data[i]%2==0)
{jumlah+=data[i];}
}
cout<<"\nData sebelum diurutkan : "<<endl;
for(i=0; i<k; i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
for( i=0;i<k;i++)
{
for(j=i+1;j<k;j++)
{
if(data[i]>data[j])
{
tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
}
}
cout<<"\nData setelah diurutkan : "<<endl;
for(i=0; i<k; i++)
{
{
cout<<data[i]<<" ";
}
}
cout<<data[i]<<" ";
}
}
cout<<"\nData setelah diurutkan (Ganjil): "<<endl;
for(i=0; i<k; i++)
{
if (data[i]%2!=0)
{
cout<<data[i]<<" ";
}
}
cout<<"\n\nJumlah dari bilangan genap = "<<jumlah;
return 0;
}
Penjelasan Program
Salah satu contoh penjelasan tentang contoh program buble shor yg ada di Sorting
Mari mengurutkan data berikut "5 1 4 2 8", mengurutkan array dari angka
terendah ke nomor terbesar menggunakan bubble sort. Dalam setiap langkah,
unsur-unsur yang ditulis dalam huruf tebal sedang dibandingkan.
Pertama :
(5 1 4 2 8) (1 5 4 2 8), Di sini, algoritma membandingkan dua elemen pertama,
dan swap karena 5> 1.
(1 5 4 2 8) (1 4 5 2 8), Swap Karena 5> 4
(1 4 5 2 8) (1 4 2 5 8), Swap Karena 5> 2
(1 4 2 5 8) (1 4 2 5 8), Sekarang, elemen ini sudah dalam urutan (8> 5),
algoritma tidak swap.
Kedua :
(1 4 2 5 8) (1 4 2 5 8)
(1 4 2 5 8) (1 2 4 5 8), Swap Karena 4> 2
(1 2 4 5 8) (1 2 4 5 8)
(1 2 4 5 8) (1 2 4 5 8)
Sekarang, array sudah diurutkan, tapi algoritma tidak tahu apakah sudah selesai.
Algoritma memeriksa satu-satu secara seluruh tanpa swap.
Ketiga :
(1 2 4 5 8) (1 2 4 5 8)
(1 2 4 5 8) (1 2 4 5 8)
(1 2 4 5 8) (1 2 4 5 8)
(1 2 4 5 8) (1 2 4 5 8)
Semua data sudah terurut…