Home » Archives for 2019
Minggu, 11 Agustus 2019
Materi Struktur Organisasi Data Sorting
Agustus 11, 2019 Ali Hanafiah
Hay sahabat blogger, tanpa panjang lebar nih aku mau memberikan materi yang bisa dibilang mudah tapi bisa membuat kalian bingung dengan tiba-tiba, materinya adalah sorting hehe, kalian gaakan bingung kalau kalian mengerti jadi silahkan dibaca yaa temen-temen.. XD
SORTING
Pengurutan data dalam struktur data sangat penting terutama
untuk data yang bertipe 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
|
3 9 6
|
21 10 1 13
|
Ascending
|
1 3 6
|
9 10 13 21
|
Descending
|
21 13
|
10 9 6 3 1
|
Deklarasi Array Sorting
Mendeklarasikan
array secara global:
int data[100];
int n; //untuk jumlah data
Fungsi Tukar 2 Buah
Data:
void tukar (int a, int b) {
int tmp;
tmp = data
[a] ; data [a] = data [b] ; data [b] = tmp ;
BUBBLE SORT
Merupakan metode sorting termudah, diberi nama “Bubble”
karena proses pengurutan secara berangsur-angsur bergerak/berpindah ke
posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data dengan cara
membandingkan elemen sekarang dengan elemen berikutnya. Jika elemen sekarang
lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar, jika
pengurutan ascending. Jika elemen sekarang lebih kecil dari elemen berikutnya,
maka kedua elemen tersebut ditukar, jika pengurutan descending. Algoritma ini
seolah-olah
menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya. Ketika
satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian
seterusnya. Kapan berhentinya? Bubble sort berhenti jika seluruh array telah
diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai
perurutan yang telah diinginkan.
Gambar 1. Proses ke-1 Algoritma Bubble Sort
Pada gambar di atas, pengecekan dimulai dari data yang paling akhir,
kemudian dibandingkan dengan data di depannya, jika data di
depannya lebih besar maka akan ditukar.
Gambar 2. Proses ke-2 Algoritma Bubble Sorting
Pada proses ke-2, pengecekan dilakukan sampai dengan data
ke-2 karena data pertama pasting sudah paling kecil.
Gambar 3. Proses
ke-3 Algoritma Bubble Sorting
Gambar 4. Proses
ke-4 Algoritma Bubble Sorting
Gambar 5. Proses
ke-5 Algortima Bubble Sorting
Sintaks program
fungsi Bubble Sort
void
bubble sort () {
for
(int i = 1; i<n; i++) {
for (int j = n-1; j>=1; j--) {
if (data [j] < data [j-1])
tukar (j, j-1); // ascending
}
}
Dengan
prosedur di atas, data terurut naik (ascending), untuk urut turun (descending)
silahkan ubah bagian:
if
(data [j] < data [j-1] )
Menjadi:
if
(data [j] > data [j-1])
tukar
(j, j-1);
Algoritma
Bubble Sorting mudah dalam sintaks, tetapi lebih hemat dibandingkan dengan
algoritma sorting yang lain.
EXCHANGE SORT
Sangat mirip dengan Bubble Sort, dan banyak yang mengatakan Bubble Sort sama dengan Exchange Sort. Perbedaan ada dalam hal bagaimana membandingkan antar elemen-elemennya. Exchange sort membandingkan suatu elemen dengan elemen-elemen lainnya dalam array tersebut, dan melakukan pertukaran elemen jika perlu. Jadi ada elemen yang selalu menjadi elemen pusat (pivot). Sedangkan Bubble Sort akan membandingkan elemen pertama/terakhir dengan elemen sebelumnya/sesudahnya, kemudian elemen sebelum/sesudahnya itu akan menjadi pusat (pivot) untuk dibandingkan dengan elemen sebelumnya/sesudahnya lagi, begitu seterusnya.
Sintaks program
fungsi Exchange Sorting
void
exchange sort ()
{
for
(int i=0; i<n-1; i++) {
for
(int j=(i+1); j<n; j++) { if (data [i] < data[j])
tukar(i,j);
//descending
}
}
}
SELECTION SORT
Merupakan kombinasi antara sorting dan
searching. Untuk setiap proses, akan dicari elemen- elemen yang belum diurutkan
yang memiliki nilai terkecil atau terbesar akan dipertukarkan ke posisi yang
tepat di dalam array. Misalnya untuk putaran pertama, akan dicari data dengan
nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada
putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks
kedua (data[1]). Selama proses, pembandingan dan pengubahan hanya dilakukan pada
indeks pembandingan saja, pertukaran data secara fisik terjadi pada akhir proses.
Gambar 7. Proses Algoritma Selection Sorting
Sintaks program
fungsi Selection Sorting
void selection_sort () {
for
(int i=0; i<n-1; i++) { pos = i;
for (int j=i+1; j<n; j++) {
if
(data[j] < data[pos]) pos = j; //ascending
}
If (pos != i) tukar(pos, i);
}
}
INSERT SORT
Mirip dengan cara orang mengurutkan kartu, selembar demi
selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya.
Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan
data yang lebih kecil, maka akan ditempatkan (di-insert) diposisi yang seharusnya. Pada penyisipan elemen, maka
elemen-elemen lain akan bergeser ke belakang.
Gambar 9. Proses Algoritma Insertion Sorting
Sintaks program
fungsi Insertion Sort
void
insertion_sort () { int temp;
for(int
i=1; i<n; i++) { temp = data[i];
j = i-1;
while
(data[j]>temp && j>=0) { data[j+1] = data[j];
j--;
}
Data[j+1] = temp;
}
}
Program lengkapnya: (PERCOBAAN LATIHAN)
#include <stdio.h> #include <conio.h>
int data[10], data2[10]; int n;
void
tukar (int a, int b) { int t;
t = data[b]; data[b] = data[a]; data[a] = t;
}
void bubble_sort ()
{
for (int i=1;
i<n; i++) {
for (int j=n-1;
j>=i; j--) {
if (data[j] <
data[j-1])
tukar(j, j-1);
}
}
printf (“bubble sort selesai!\n”);
}
void exchange_sort
() {
for (int i=0;
i<n-1; i++) {
for
(int j = (i+1); j<n; j++) { if (data [i] > data[j])
tukar (i, j);
}
}
printf (“exchange sort selesai!\n”);
}
void
selection_sort () { int pos, i, j;
for
(i=0; i<n-1; i++) { pos = i;
for (j = i+1;
j<n; j++) {
if (data [j] < data[pos]) pos = j;
}
if (pos != i) tukar
(pos, i);
}
printf (“selection sort selesai!\n”);
}
void
insertion_sort () { int temp, i, j;
for (i=1; i<n;
i++) {
temp = data[i]; j = i-1;
while (data[j] > temp &&
j>=0) { data[j+1] = data[j];
j--;
}
data[j+1] = temp;
}
printf(“insertion sort selesai!\n”);
}
void Input () {
printf (“Masukkan jumlah
data = ”); scanf (“%d”, &n);
for(int i=0; i<n;
i++) {
printf (“Masukkan data ke-%d = ”, (i+1)); scanf (“%d”, &data[i]);
data2[i] = data[i];
}
}
void AcakLagi () {
for (int i=0; i<n; i++) { data[i] =
data2[i];
}
printf (“Data sudah teracak!\n”);
}
void
Tampil () {
printf (“Data : ”);
for
(int i=0; i<n; i++) { print (“%d ”, data[i]);
}
printf (“\n”);
}
void main() { clrscr();
int pil; do {
clrscr ();
printf (“1. Input
Data\n”); printf(“2. Bubble Sort\n”); printf(“3. Exchange Sort\n”); printf(”4.
Selection Sort\n”); printf(“5. Tampilkan Data\n”); printf(“6. Acak\n”);
printf(“7. Exit”);
printf(“Pilihan = ”);
scanf(“%d”, &pil); switch(pil) {
case 1: Input();
break;
case 2: bubble_sort(); break; case 3: exchange_sort(); break;
case 4: selection_sort(); break; case 5: Tampil(); break;
case
6: AcakLagi(); break;
}
getch();
}
while (pil!=7);
}
Sabtu, 10 Agustus 2019
Materi Struktur Organisasi Data Queue
Agustus 10, 2019 Ali Hanafiah
Hay sahabat blooger, kita ketemu lagi yaa hehe jangan-jangan kita jodoh hehe, aku mau share materi tentang queue materinya hampir mirip sama stack tapi pastinya berbeda, yuk kita baca dan kita pelajari apa yang berbeda dari materi ini, Cekidott... XD
QUEUE
Kaidah utama dalam konsep 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. Gambar di bawah ini mengilustrasikan kerja sebuah queue:
Deklarasi queue dalam program
Sebuah queue di dalam program komputer dideklarasikan sebagai sebuah tipe bentukan baru, di dalam Bahasa C, biasa disebut struct. Sebuah struktur data dari sebuah queue setidaknya harus mengandung dua tiga variabel, yakni variabel HEAD yang akan berguna sebagai penanda bagian depan antrian, variabel TAIL yang akan berguna sebagai penanda bagian belakang antrian dan ARRAY DATA dari yang akan menyimpan data-data yang dimasukkan ke dalam queue tersebut. Berikut adalah syntax untuk mendeklarasikan struktur data dari sebuah queue menggunakan Bahasa C:
typedef struct
{
int HEAD, TAIL;
int data[max+1];
}Queue;
dimana, nilai MAX didefinisikan sebagai jumlah tumpukan maksimum yang dapat disimpan dalam queue. Setelah strukutr 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:
Queue antrian;
Dalam tulisan ini, sebuah queue didefinisikan dengan array berukuran MAX + 1, maksudnya adalah agar elemen array ke-0 tidak digunakan untuk menyimpan data, melainkan hanya sebagai tempat „singgah‟ sementara untuk variabel HEAD dan TAIL. Sehingga, jika HEAD dan TAIL berada pada elemen array ke-0, berarti queue tersebut dalam kondisi kosong (tidak ada data yang disimpan). Berikut adalah ilustrasi dari sebuah queue kosong dengan ukuran nilai MAX = 6:
Operasi-operasi dasar dalam queue
Pada dasarnya, operasi-operasi dasar pada queue mirip dengan operasi-operasi dasar pada stack. Perbedaannya hanya pada prosedur push dan pop saja. Pada queue, prosedur yang berfungsi untuk memasukkan data/ nilai ke dalam antrian adalah enqueue, sedangkan prosedur untuk mengeluarkan data/ nilai dari antrian adalah dequeue.
a. Prosedur createEmpty
Sama pada stack, prosedur ini berfungsi untuk mengosongkan queue dengan cara meletakkan HEAD dan TAIL pada indeks array ke-0. Berikut deklarasi prosedur createEmpty pada queue dalam Bahasa C:
void createEmpty()
{
antrian.HEAD = 0;
antrian.TAIL = 0;
}
b. 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;
}Pada deklarasi prosedur enqueue di atas, prosedur memiliki sebuah parameter formal yang bernama „x‟ yang bertipe integer. Parameter formal „x‟ ini berguna untuk menerima kiriman nilai dari program utama (void main()) yakni berupa sebuah bilangan integer yang akan dimasukkan ke dalam queue. Gambar di bawah ini mengilustrasikan proses enqueue ke dalam sebuah queue yang masih kosong.
c. Prosedur dequeue
Prosedur ini digunakan untuk mengeluarkan atau membuang sebuah data/ nilai yang paling awal masuk (yang berada pada posisi HEAD, yakni yang paling depan dari antrian) ke dalam queue. Pekerjaan yang dilakukan oleh prosedur ini adalah menaikkan nilai HEAD satu level. Jadi, setiap satu kali data dikeluarkan, maka posisi HEAD naik bertambah satu level. Misalkan HEAD berada pada indeks ke-1, maka ketika akan mengeluarkan/ menghapus data pada posisi paling depan (pada posisi HEAD), prosedur ini akan menaikkan posisi HEAD ke indeks array ke-2. Berikut deklarasi prosedur pop dalam Bahasa C:
void Dequeue(){
if (q.head > q.tail) { q.head = 0;
q.tail = 0;
}
q.head = q.head + 1;
}
d. 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;
}
e. Fungsi IsFull
Fungsi ini berfungsi untuk melakukan pengecekan terhadap queue, apakah queue tersebut penuh atau tidak. Jika queue tersebut penuh (artinya, TAIL berada pada posisi MAX), maka fungsi akan mengembalikan nilai 1 (true), tetapi jika queue tersebut tidak penuh (artinya, TAIL tidak berada pada posisi MAX), maka fungsi akan mengembalikan nilai 0 (false). Berikut deklarasi fungsi IsFull dalam Bahasa C:
2. Contoh program implementasi queue
Berikut adalah contoh kode program dalam Bahasa C yang mengimplementasikan konsep queue. Pada program ini, user akan menginputkan data satu per satu, kemudian setelah selesai menginputkan data ke dalam queue, maka program akan menampilkan semua isi queue.
Materi Struktur Organisasi Data Stack
Agustus 10, 2019 Ali Hanafiah
Halo sahabat blogger, balik lagi nih sama aku, sebelumnya kita udh bnyk bahas materi dan sekarang aku mau memberikan materi lagi yaitu materi Stack (Tumpukan), langsung ajah yukk kita belajar bersama, Cekidott... :D
Materi Struktur Organisasi Data Linked List
Agustus 10, 2019 Ali Hanafiah
Hay hay sahabat blogger, balik lgi nih sama aku Ali Hanafiah jadi disini aku mau memberikan materi tentang linked list, pasti blom ada yang tau kan ? nahh langsung ajah kita ke materinya, Cekidotttt... XD
Materi Struktur Organisasi Data Array dan Record
Agustus 10, 2019 Ali Hanafiah
Hay sahabat blogger, materi kali ini aku mau share tentang array agar kalian mengerti semua materi yang aku berikan, dibaca yaa... kalo ada yang kurang komen ajah di bawah hehe. lngsung ajh cekidot XD
Langganan:
Postingan
(
Atom
)