STRUKTUR DATA
Dosen pengampu:
Avip Kurniawan, M.Kom
OLEH :
Jawabannya :
Dalam bentuknya array dapat kita tinjau dari segi pengaturan struktur datanya
dalam konteks dimensi sebagai berikut:
Penjelasan :
tipe_data: menyatakan jenis tipe data elemen larik (int, char, float,
dll)
nama_var_array : menyatakan nama variabel yang dipakai.
ukuran: menunjukkan jumlah maksimal elemen larik.
Array 2-dimensi memiliki 2 sisi yaitu Panjang dan lebar, contohnya: Tabel,
Matriks
Contoh nya :
Array 3-dimensi memiliki 3 sisi yang dapat dibedakan menjadi Panjang lebar
dan tinggi sehinga membentuk suatu gambar yang memiliki isi, contohnya:
matriks (3 dimensi)
Array multi-dimensi, pada prinsipnya, secara teori jumlah dimensi dari
matriks tidak terbatas, yang membatasi adalah kemampuan hardware dan
besar dari memori.
2. Apa yang dimaksud dengan Searching, jelaskan operasi-operasi searching data dalam
Struktur
Jawaban :
Array adalah sebuah koleksi dari elemen atau suatu nilai yang dapat diindentifikasi
dengan menggunakan indeks yang memiliki tipe data yang sama dan dinyatakan dengan
nama yang sama. Array memungkinkan untuk menyimpan data maupun referensi objek
dalam jumlah banyak dan terindeks. Array menggunakan indeks integer untuk
menentukan urutan elemen-elemennya, dimana elemen pertamanya dimulai dari indeks
0,elemen kedua memiliki indeks 1, dan seterusnya.jadi dengan adanya indeks,
dimungkinkan untuk pengaksesan secara acak (random Access)
Linked List adalah Struktur Data yang terdiri dari suatu node dan referensi/pointer yang
menghubungkan satu node dengan yang lain. Dimana Node terakhir memiliki referensi
ke null. Setiap node memiliki data dan referensi ke node selanjutnya (singly) dan atau ke
node sebelumnya (doubly). Digunakan sebagai dasar
implementasi Stacks dan Queue. Tidak ada unsur Random Access via indeks seperti Array
dan setiap operasi biasanya perlu operasi sekuensial dari node awal.
Stack merupakan sebuah kumpulan data atau item dengan cara penambahan item baru
serta penghapusan, selalu terjadi pada tempat atau ujung yang sama. Stack ini biasa di
analogikan seperti tumpukan pada piring. Dimana kita mengambil maupun meletakkan
piring selalu pada sisi atasnya. Stack ini memiliki konsep LIFO (last in first out) atau
dalam bahasa indonesianya adalah data yang terakhir masuk, maka ialah yang pertama
akan dikeluarkan.
Queue merupakan koleksi item yang cara penambahan itemnya terjadi pada sebuah ujung
yang biasa disebut sebagai “ekor” atau (rear) dan untuk penghapusannya, terjadi pada
ujung yang satunya. Atau biasa kita beri nama “kepala” atau (head). Jadi konsep dari
queue ini menggunakan konsep layak nya FIFO yang merupakan kepanjangan dari First in
First out. Dalam kehidupan sehari — hari, konsep ini biasa di analogikan sebagai sebuah
antrian. Dimana setiap orang yang datang terlebih dahulu, maka ia lah yang akan di layani
terlebih dahulu. Nah konsep ini sangat berbeda dengan konsep yang ada pada stack.
Namun, sama seperti stack, kelas ini juga memiliki beberapa operasi.
Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan
hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa
didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut
Root dan node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan
satu sama lainnya (disebut subtree).
Dibagi menjadi 2 :
Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki
maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan
definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling
banyak dua child.
Binary Search Tree (BST) Adalah Binary Tree dengan sifat bahwa semua left child
harus lebih kecil daripada right child dan parentnya. Juga semua right child harus
lebih besar dari left child serta parentnya. Binary seach tree dibuat untuk mengatasi
kelemahan pada binary tree biasa, yaitu kesulitan dalam searching / pencarian node
tertentu dalam binary tree.
Balanced binary tree adalah sekumpulan node yang memiliki node yang seimbang atau
selisih satu. Dengan Balanced Binary Search Tree, kita dapat membuat suatu tree dengan
tinggi minimum.
Graph merupakan sekumpulan dari node dan sekumpulan garis(edge) bersifat non-linier
yang kemungkinan bisa hirarki bisa juga tidak. Dan pemakaian graph dalam dunia nyata
biasanya seperti lingkaran pertemanan, dimana dari lingkaran tersebut kita bisa
mempresentasikan dari satu teman ke teman yang lainnya.
Pada struktur data ini, bisa melakukan searching data by index, tetapi ada sebuah proses
abstraksi dibelakangnya untuk mendapatkan suatu index. Fungsi abstraksi ini sebisa
mungkin harus menghasilkan index yang berbeda untuk setiap data agar tidak terjadi
tabrakan (collision).
3. Apa yang dimaksud Sorting, jelaskan operasi operasi pada sorting disertai contoh
Jawaban :
Bubble Short : Algoritma ini merupakan salah satu algoritma pengurutan yang paling
sederhana, baik dalam hal pengertian maupun penerapannya. Ide dari algoritma bubble
sort adalah mengulang proses pembandingan antara tiap-tiap elemen array dan
menukarnya apabila urutannya salah.
Teknik ini menyusun data yang diinginkan secara berurutan dengan membandingkan
elemen data yang ada dan terus diulang hingga tidak perlu dilakukan penukaran lagi.
Berikut ini adalah gambaran dari algoritma bubble sort:
Cara Kerja:
Quick Short : Algoritma quick short ditemukan oleh E. Hoare. Algoritma ini
menggunakan metode rekursi sampai habis. Prinsipnya membagi data menjadi dua
bagian yang sama (kiri dan kanan).
Dimana data tengah menjadi pivot (pusat operasi). Kemudian kita akan mengumpukan
data dengan nilai lebih kecil dari pivot disebelah kiri pivot, dan di kanan untuk yang lebih
besar.Karena dimungkinkan bagian kiri dan kanan pivot tidak sama besarnya. maka dari
itu tiap bagian di bagi menjadi dua lagi sehingga mempunyai pivot yang baru.
Penjelasan :
Algoritma Quick Sort juga disebut juga
dengan partition Exchange sort karena
Konsepnya membuat partisi-partisi, dan sort
dilakukan per partisi.
Shell Short
Prinsipnya hampir sama dengan Bubble Sort tetapi dioptmisisasi sehingga lebih cepat.
Ditemukan oleh Donald Shell. prinsipnya adalah membandingkan data dengan jarak
tertentu dalam array. Algoritma utamanya adalah sebagai berikut :
Contoh Program :
Selection sort : merupakan teknik sorting yang paling sederhana, hal pertama yang akan
dilakukan algoritma selection sort adalah menemukan elemen terkecil dalam array kita
dan menukarnya (swap) dengan elemen yang ada di posisi pertama, kemudian algoritma
ini akan mengulangi hal yang sama lagi yaitu mencari elemen terkecil yang ada di dalam
array dan kemudian menukarnya (swap) dengan elemen yang ada di posisi kedua
(mengingat elemen di posisi pertama sudah berhasil kita sorting). Proses ini akan terus
berlanjut sampai semua elemen yang ada di dalam array telah berhasil kita sorting.
Contoh Program :
Insertion sort adalah sebuah metode pengurutan data dengan menempatkan setiap elemen
data pada pisisinya dengan cara melakukan perbandingan dengan data – data yang ada.
Inde algoritma dari metode insertion sort ini dapat dianalogikan sama seperti
mengurutkan kartu, dimana jika suatu kartu dipindah tempatkan menurut posisinya, maka
kartu yang lain akan bergeser mundur atau maju sesuai kondisi pemindahanan kartu
tersebut. Dalam pengurutan data, metode ini dipakai bertujuan untuk menjadikan bagian
sisi kiri array terurutkan sampai dengan seluruh array diurutkan.
Contoh Program :
4. Sebutkan dan jelaskan 10 sorting (pengurutan ) dalam struktur data dan berikan contoh
implementasinya
Jawabannya :
Bubble Sort
Merupakan algoritma pengurutan paling tua dengan metode pengurutan paling sederhana.
Pengurutan yang dilakukan dengan membandingkan masing-masing item dalam suatu list
secara berpasangan, menukar item jika diperlukan, dan mengulaginya sampai akhir list
secara berurutan, sehingga tidak ada lagi item yang dapat ditukar.
Membandingkan data ke-i dengan data ke-(i+1) (tepat bersebelahan). Jika tidak sesuai
maka tukar (data ke-i = data ke-(i+1) dan data ke-(i+1) = data ke-i). Apa maksudnya
tidak sesuai? Jika kita menginginkan algoritme menghasilkan data dengan urutan
ascending (A-Z) kondisi tidak sesuai adalah data ke-i > data ke-i+1, dan sebaliknya untuk
urutan descending (A-Z).
Perbedaan :
Implementasinya :
Selection Sort
Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling rendah
dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke n,
dimana n adalah jumlah total elemen dikurangi 1.
Selection Sort diakui karena kesederhanaan algoritmanya dan performanya lebih bagus
dari pada algoritma lain yang lebih rumit dalam situasi tertentu. Algoritma ini bekerja
sebagai berikut :
Mencari nilai minimum (jika ascending) atau maksimum (jika descending) dalam sebuah
list
Menukarkan nilai ini dengan elemen pertama list
Mengulangi langkah di atas untuk sisa list dengan dimulai pada posisi kedua
Secara efisien kita membagi list menjadi dua bagian yaitu bagian yang sudah diurutkan,
yang didapat dengan membangun dari kiri ke kanan dan dilakukan pada saat awal, dan
bagian list yang elemennya akan diurutkan.
Implementasi Selection Sort dalam bahasa C++
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <iomanip>
#ifdef __cplusplus__
#include <cstdlib>
#else
#include <stdlib.h>
#endif
using namespace std;
int main()
{
int x[5];
int i;
int temp;
int minindex;
int j;
if (system("CLS")) system("clear");
cout << " >> Program Selection Sort << \n" << endl;
cout << "masukkan nilai x :\n";
for (i = 0; i<5; i++)
{
cout << "x[" << i << "] = "; cin >> x[i];
}
cout << "\n Data sebelum di sort :";
for (i = 0; i<5; i++)
{
cout << setw(4) << x[i];
}
for (i = 0; i<5 - 1; i++) //perulangan iterasi
{
minindex = i;
for (j = i + 1; j<5; j++) //perulangan membandingkan data
{
if (x[minindex]>x[j])
{
minindex = j;
}
}
temp = x[i];
x[i] = x[minindex];
x[minindex] = temp;
}
cout << "\n Data setelah di sort :";
for (i = 0; i<5; i++)
{
cout << setw(4) << x[i];
}
getchar();
cout << endl;
system("pause");
}
Heap Sort
Heapsort merupakan salah satu bentuk dari selection sort yang memiliki kompleksitas
algorima O(n log(n)) yang menggunakan struktur data heap. Algoritma ini bekerja
dengan menentukan elemen terbesar (atau terkecil) dari sebuah daftar elemen, dan
diletakkan pada akhir (atau awal) dari daftar tersebut. Heap sort menyelesaikan sebuah
pengurutan menggunakan struktur data yang disebut heap. Heap merupakan sebuah
pohon biner hampir lengkap dimana isi dari simpul ayah selalu lebih besar dari isi simpul
anak-anaknya sehingga simpul akar selalu merupakan elemen terbesar.
Algoritma :
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <iomanip>
#ifdef __cplusplus__
#include <cstdlib>
#else
#include <stdlib.h>
#endif
using namespace std;
int main()
{
int x[5];
int i;
int temp;
int minindex;
int j;
if (system("CLS")) system("clear");
cout << " >> Program Selection Sort << \n" << endl;
cout << "masukkan nilai x :\n";
for (i = 0; i<5; i++)
{
cout << "x[" << i << "] = "; cin >> x[i];
}
cout << "\n Data sebelum di sort :";
for (i = 0; i<5; i++)
{
cout << setw(4) << x[i];
}
for (i = 0; i<5 - 1; i++) //perulangan iterasi
{
minindex = i;
for (j = i + 1; j<5; j++) //perulangan membandingkan data
{
if (x[minindex]>x[j])
{
minindex = j;
}
}
temp = x[i];
x[i] = x[minindex];
x[minindex] = temp;
}
cout << "\n Data setelah di sort :";
for (i = 0; i<5; i++)
{
cout << setw(4) << x[i];
}
getchar();
cout << endl;
system("pause");
}
Insertion Sort
Insertion sort adalah sebuah metode pengurutan data dengan menempatkan setiap elemen
data pada pisisinya dengan cara melakukan perbandingan dengan data – data yang ada.
Ide algoritma dari metode insertion sort ini dapat dianalogikan sama seperti mengurutkan
kartu, dimana jika suatu kartu dipindah tempatkan menurut posisinya, maka kartu yang
lain akan bergeser mundur atau maju sesuai kondisi pemindahanan kartu tersebut. Dalam
pengurutan data, metode ini dipakai bertujuan untuk menjadikan bagian sisi kiri array
terurutkan sampai dengan seluruh array diurutkan.
Dimulai dengan posisi tangan kosong, dan semua kartu berada diatas meja. dan
anggaplah kita akan menyusun kartu ke tangan kiri kita.
Mengambil kartu kedua dan membandingkannya dengan kartu yang sudah ada di
tangan kiri.
Jika kartu yang diambil dari meja memenuhi syarat perbandingan, maka kartu
tersebut akan diletakan didepan kartu yang dibandingkan, serta kartu yang lain
yang telah dibandingkan akan bergeser mundur (ke belakang).
Implementasi Insertion Sort dalam bahasa C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i, j, n, data[10], simpan, min, posisi;
cout << "Masukkan banyak data = "; cin >> n;
for (i = 1; i <= n; i++)
{
cout << "Data ke - " << i << " = "; cin >> data[i];
}
for (i = 1; i<n; i++)
{
for (j = i + 1; j <= n; j++)
{
if (data[i]>data[j])
{
simpan = data[i];
data[i] = data[j];
data[j] = simpan;
}
}
}
cout << "Hasil sorting adalah = ";
for (i = 1; i <= n; i++)
cout << data[i] << " ";
getchar();
system("pause");
}
Tree Sort
Tree sort adalah metode sorting dengan cara membangun pohon biner dengan menampilkan
3 hasil output: Pre Order, In Order, Post Order.
Menjadi akar ,
Menjadi subtree kiri,
Menjadi subtree kanan,
Menjadi daun dari subtree kiri ,
Menjadi daun dari subtree kanan.
Implementasi Tree Sort dalam bahasa C++
}
void TreeSort::sortit(){
for(int i = 0; i < no_of_elements; i++){
insert1(elements[i]);
}
}
tree* TreeSort::insert2(tree *temp,tree *newnode){
if(temp==NULL){
temp=newnode;
}
else if(temp->info < newnode->info){
insert2(temp->Right,newnode);
if(temp->Right==NULL)
temp->Right=newnode;
}
else{
insert2(temp->Left,newnode);
if(temp->Left==NULL)
temp->Left=newnode;
}
return temp;
}
void TreeSort::insert1(int n){
tree *temp=root,*newnode;
newnode=new tree;
newnode->Left=NULL;
newnode->Right=NULL;
newnode->info=n;
root=insert2(temp,newnode);
}
/* Inorder traversal */
void TreeSort::display(tree *t = root){
if(root==NULL){
cout<<"Nothing to display";
}else
if(t!=NULL){
display(t->Left);
cout<<t->info<<" ";
display(t->Right);
}
}
int main(){
TreeSort TS;
TS.getarray();
TS.sortit();
TS.display();
return 0;
Quick Sort
Algoritma sortir yang efisien yang ditulis oleh C.A.R. Hoare pada 1962. Dasar strateginya
adalah “memecah dan menguasai”. Quicksort dimulai dengan menscan daftar yang disortir
untuk nilai median. Nilai ini, yang disebut tumpuan (pivot), kemudian dipindahkan ke satu
sisi pada daftar dan butir-butir yang nilainya lebih besar dari tumpuan di pindahkan ke sisi
lain.
Algoritma ini mengambil salah satu elemen secara acak (biasanya dari tengah) yang disebut
dengan pivot lalu menyimpan semua elemen yang lebih kecil di sebelah kiri pivot dan
semua elemen yang lebih besar di sebelah kanan pivot. Hal ini dilakukan secara rekursif
terhadap elemen di sebelah kiri dan kanannya sampai semua elemen sudah terurut.
Ide dari algoritma ini adalah sebagai berikut:
Merge Sort
Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk
memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk
ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini
ditemukan oleh John von Neumann pada tahun 1945.
Divide
Memilah elemen – elemen dari rangkaian data menjadi dua bagian.
Conquer
Conquer setiap bagian dengan memanggil prosedur merge sort secara rekursif
Kombinasi
Mengkombinasikan dua bagian tersebut secara rekursif untuk mendapatkan rangkaian
data berurutan
Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang
akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut
menandakan bahwa bagian tersebut telah terurut sesuai rangkaian.
a11 a12 a13 a21 a22 a23 a31 a32 a33 a41 a42 a43 a51 a52 a53
a61 a62 a63 a71 a72 a73 a81 a82 a83 a91 a92 a93 a101 a102 a103
a11 a21 a31 a41 a51 a61 a71 a81 a91 a101
a12 a22 a32 a42 a52 a62 a72 a82 a92 a102
a13 a23 a33 a43 a53 a63 a73 a83 a93 a103