QUEUE
- Queue (Antrian) adalah suatu bentuk khusus dari List Linier dengan operasi penyisipan
(insertion) hanya diperbolehkan pada salah satu sisi, yang disebut sisi belakang (REAR),
dan operasi penghapusan (deletion) hanya diperbolehkan pada sisi yang lainnya.
- Queue merupakan kumpulan data dengan penambahan data hanya melalui satu sisi, yaitu
belakang (tail) dan penghapusan data hanya melalui sisi depan (head).
- Berbeda dengan stack yang bersifat LIFO maka queue bersifat FIFO (First In First Out),
yaitu data yang pertama masuk akan keluar terlebih dahulu dan data yang terakhir masuk
akan keluar terakhir.
- Queue (antrian) adalah salah satu list linier dari struktur data yang beroperasi dengan cara
First In First Out (FIFO) yaitu elemen pertama yang masuk merupakan elemen yang
pertama keluar. Data-data di dalam antrian dapat bertipe integer, real, record dalam
bentuk sederhana atau terstruktur. Queue dilakukan dengan cara penyisipan di satu ujung,
sedang penghapusan di ujung lain. Ujung penyisipan biasa disebut rear/tail, sedang ujung
penghapusa disebut front/head.
- Pada queue ada operasi – operasi dasar, yaitu: prosedur create untuk membuat queue
baru yang kosog, fungsi IsEmpty untuk mengecek queue tersebut kosong atau tidak,
fungsi IsFull untuk mengecek queue tersebut penuh atau tidak, prosedur EnQueue untuk
memasukkan data kedalam queue, prosedur DeQueue untuk mengeluarkan sebuah
elemen pada posisi head dari queue, fungsi clear untuk menghapus elemen queue, dan
prosedur tampil untuk menampilakn elemen yang ada pada queue.
- Ada beberapa queue, yaitu: queue dengan linear array yaitu queue yang dibuat seakan-
akan merupakan suatu garis lurus dengan satu pintu masuk dan satu pintu keluar, queue
dengan circular array yaitu queue yang dibuat seakan-akan merupakan sebuah lingkaran
dengan titik awal (head) dan titik akhir (tail) saling bersebelahan jika array tersebut masih
kosong, dan queue dengan linked-list.
- Elemen yang pertama kali masuk ke dalam queue disebut elemen depan (front/head of
queue), sedangkan elemen yang terakhir kali masuk ke queue disebut elemen belakang
(rear/tail of queue).
- Perbedaan antara stack dan queue terdapat pada aturan penambahan dan penghapusan
elemen.
- Pada stack, operasi penambahan dan penghapusan elemen dilakukan di satu ujung.
Elemen yang terakhir kali dimasukkan akan berada paling dekat dengan ujung atau
dianggap paling atas sehingga pada operasi penghapusan, elemen teratas tersebut akan
dihapus paling awal, sifat demikian dikenal dengan LIFO.
- Pada queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen
selalu dilakukan melalui salah satu ujung, menempati posisi di belakang elemen‐elemen
yang sudah masuk sebelumnya atau menjadi elemen paling belakang. Sedangkan
penghapusan elemen dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang
masuk paling awal atau elemen terdepan. Sifat yang demikian dikenal dengan FIFO.
- Operasi-operasi queue:
1). Enqueue (menginputkan data pada queue) -> memasukkan 1 elemen ke dalam queue.
2). Dequeue (mengambil data dari queue) -> mengambil 1 elemen dari Queue, operasi ini
sering disebut juga SERVE. Hal ini dilakukan dengan cara memindahkan semua elemen
satu langkah ke posisi di depannya, sehingga otomatis elemen yang paling depan akan
tertimpa dengan elemen yang terletak dibelakangnya.
3). isEmpty (mengecek apakah antrian kosong -> mengecek apakah queue masih kosong
atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah tail bernilai nol atau
tidak, jika ya maka kosong.
5. Printer Sharing
Pada suatu jaringan terdapat beberapa aplikasi yang dapat membantu kita untuk
mempermudah pekerjaan kita untuk melakukan cetak hanya dengan menggunakan 1
printer yang dapat dipakai oleh banyak orang yaitu dengan cara printer sharing. Aplikasi
ini menggunakan cara kerja queue atau juga disebut dengan antrian, untuk mencetak
suatu document yang hanya menggunakan 1 printer yang dapat diakses oleh orang
banyak, penggunaan queue diperlukan untuk mengatur sistem jaringan agar tidak terjadi
error, dengan cara siapa yang terlebih dahulu mencetak suatu dokumen, dia akan dilayani
terlebih dahulu untuk mencetak dokumen dan jika ada seseorang yang ingin mencetak
dokumen dia akan dimasukan kedalam antirian dan menunggu untuk dapat mencetak
sebuah document.
6. Sistem Produksi
Dalam sistem produksi terdapat banyak sekali aplikasi antrian, misalnya pada mesin
pengisi (filling) botol minuman otomatis di pabrik. Mesin ini digunakan agar
mempermudah pekerjaan, meminimalisir waktu, dan masih banyak lagi manfaat lainnya.
Cara kerja dari mesin filling otomatis ini yaitu :
1. Beberapa botol disiapkan pada tempatnya.
2. Kemudian mesin akan mengisi air kedalam botol sesuai dengan posisinya.
3. Botol yang diletakkan paling depan akan diisi oleh mesin paling awal, setelah botol
paling depan terisi baru akan berjalan ke botol yang dibelakangnya, dan seterusnya.
Prinsip queue atau antrian digunakan dalam mesin ini, karena FIFO (First In First Out).
Jadi botol yang paling awal/depan sampai pada pengisi air, maka botol itu juga yang akan
pertama keluar/diisi.
LINKED LIST
- Linked List adalah suatu cara untuk menyimpan data dengan struktur sehingga
programmer dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data
kapan saja diperlukan. Linked list dikenal juga dengan sebutan senarai berantai adalah
stuktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang
menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang
dihubungkan dengan link pada linked list disebut Node.
- Biasanya dalam suatu linked list, terdapat istilah head dan tail .
1. Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
2. Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list.
- Jenis Linked List (yang akan dipelajari) adalah :
1. Single Linked List -> Single Linked List merupakan suatu linked list yang hanya
memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node
selanjutnya. Biasanya field pada tail menunjuk ke NULL.
2. Double Linked List -> Double Linked List merupakan suatu linked list yang memiliki
dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang
menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.
3. Circular Linked List -> Circular Linked List merupakan suatu linked list dimana tail
(node terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang menunjuk
NULL. Ada 2 jenis Circular Linked List, yaitu : 1. Circular Single Linked List & 2.
Circular Double Linked List
4. Multiple Linked List -> Multiple Linked List merupakan suatu linked list yang
memiliki lebih dari 2 buat variabel pointer.
- Proses Dasar Linked List
1. Proses Inisialisasi
2. Membuat simpul baru
3. Membuat simpul awal
4. Menambah simpul baru ke dalam Linked List (INSERT)
5. Menghapus sebuah simpul dari Linked List (DELETE)
ARRAY
- Array atau dalam bahasa indonesia disebut larik, merupakan salah satu teknik
menyimpan kumpulan data dalam memori dengan cara meletakkannya secara berdekatan.
Tujuannya agar beberapa item data dari jenis yang sama berada di satu tempat dan
memudahkan ketika hendak dilakukan operasi pada data.
- Array adalah kumpulan item data yang disimpan di lokasi memori yang berdekatan.
- Dalam strukur data, array termasuk jenis struktur data linier, yaitu struktur dimana
elemen datanya disusun dalam satu dimensi.
- Ketika ingin mengakses data dalam array, kita cukup menghitung posisi setiap elemen,
yaitu dengan menambahkan offset ke nilai awal. Nilai awal adalah lokasi memori elemen
pertama array yang berada pada indeks 0 dan perbedaan antara kedua indeks adalah nilai
offset-nya.
- Karakteristik Array
Apapun karakteristik yang dimiliki oleh struktur data array adalah sebagai berikut:
Array menggunakan struktur data berbasis indeks yang membantu
mengidentifikasi setiap elemen dalam array dengan mudah menggunakan indeks.
Jika pengguna ingin menyimpan beberapa nilai dari tipe data yang sama, maka
array dapat digunakan secara efisien.
Array juga dapat menangani struktur data yang kompleks dengan menyimpan data
dalam array dua dimensi.
Array juga digunakan untuk mengimplementasikan struktur data lain
seperti stack, queue, heap, hash table, dll.
Proses pencarian dalam sebuah array dapat dilakukan dengan sangat mudah.
- Jenis-jenis Array
Berdasarkan dimensinya array dapat dikelompokkan dalam 2 jenis, yaitu: satu-dimensi
(one dimensional array) dan multidimensi (multidimensional array).
Array satu dimensi, yaitu array yang menyimpan list elemen tunggal. Array
jenis ini merepresentasikan beberapa item data sebagai satu list
Array multidimensi, yaitu array yang menyimpan list elemen dalam banyak
dimensi. Istilah sederhananya, "array di dalam array". Array jenis ini mewakili
beberapa item data sebagai tabel yang terdiri dari baris dan kolom.
- Fungsi dan Kegunaan Array
Adapun fungsi dan kegunaan array adalah sebagai berikut:
Digunakan untuk menyelesaikan masalah matriks.
Membantu dalam menerapkan algoritma sorting.
Digunakan untuk mengimplementasikan struktur data lain seperti stack, queue, heap,
hash table, dll.
Array juga dapat digunakan untuk penjadwalan CPU (CPU Scheduling).
Dapat diterapkan sebagai tabel pencarian di komputer.
Array dapat digunakan dalam pemrosesan suara di mana setiap sinyal suara adalah
array.
SORTING
- Selection Sort (Ascending):
Pengurutan dilakukan dengan memilih elemen terbesar dan menempatkan pada posisinya,
kemudian mencari element terbesar berikutnya dan menempatkan pada tempatnya, dan
seterusnya.
Proses pengurutan dengan menggunakan metode selection sort secara terurut naik adalah
1. Mencari data terkecil dari data pertama sampai data terakhir, kemunian di tukar
posisinya dengan data pertama.
2. mencari data terkecil dari data kedua sampai data terakhir, kemudian di tukar dengan
posisinya dengan data kedua.
3. mencari data terkecil dari data ketiga sampai data terakhir, kemudian di tukar posisinya
dengan data ketiga
4. dan seterusnya sampai semua data turut naik. apabila terdapat n buah data yang akan di
urutkan, maka membutukan (n – 1) langkah pengurutan, dimana data terakhir yaitu data
ke-n tidak perlu di urutkan karena hanya tinggal satu satunya.
- Bubble Sort
Konsep Buble Sort
Metode pengurutan gelembung (Bubble Sort) diinspirasikan oleh gelembung sabun yang
berada dipermukaan air. Karena berat jenis gelembung sabun lebih ringan daripada berat
jenis air, maka gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas
dipakai pada pengurutan gelembung.
Bubble sort (metode gelembung) adalah metode/algoritma pengurutan dengan dengan
cara melakukan penukaran data dengan tepat disebelahnya secara terus menerus sampai
bisa dipastikan dalam satu iterasi tertentu tidak ada lagi perubahan. Jika tidak ada
perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-
masing kunci akan dengan lambat menggelembung ke posisinya yang tepat.
- Metode Penyisipan Langsung (Insertion sort)
Data dicek satu per satu mulai dari yang kedua sampai dengan yang terakhir. Apabila
ditemukan data yang lebih kecil daripada data sebelumnya, maka data tersebut disisipkan
pada posisi yang sesuai. Akan lebih mudah apabila membayangkan pengurutan kartu.
Pertama-tama anda meletakkan kartu-kartu tersebut di atas meja, kemudian melihatnya
dari kiri ke kanan. Apabila kartu di sebelah kanan lebih kecil daripada kartu di
sebelahkiri, maka ambil kartu tersebut dan sisipkan di tempat yang sesuai.
- Metode Penggabungan (Merge Sort)
Metode penggabungan biasanya digunakan pada pengurutan berkas. Prinsip dari
metode penggabungan sebagai berikut : mula-mula diberikan dua kumpulan data yang
sudah dalam keadaan urut. Kedua kumpulan data tersebut harus dijadikan satu table
sehingga dalam keadaan urut.
- Quick Sort
Algoritma ini berdasar pada pola divide-and-conquer. Berbeda dengan merge sort,
algoritma ini hanya mengikuti langkah – langkah sebagai berikut :
1. Divide
Memilah rangkaian data menjadi dua sub-rangkaian A[p…q-1] dan A[q+1…r] dimana
setiap elemen A[p…q-1] adalah kurang dari atau sama dengan A[q] dan setiap elemen
pada A[q+1…r] adalah lebih besar atau sama dengan elemen pada A[q]. A[q] disebut
sebagai elemen pivot. Perhitungan pada elemen q merupakan salah satu bagian dari
prosedur pemisahan.
2. Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif. Pada algoritma quicksort,
langkah ”kombinasi” tidak di lakukan karena telah terjadi pengurutan elemen – elemen
pada sub-array
- Shell Sort
Merupakan algoritma yang stau jenis dengan insertion sort, dimana pada setiap nilai i
dalam n/i item diurutkan. Pada setiap pergantian nilai, i dikurangi sampai 1 sebagai nilai
terakhir
TREE
- Binary Tree (Pohon Biner) yaitu pohon yang setiap simpul/node-nya paling banyak
mempunyai dua buah subpohon.
Contoh implementasi :
untuk membuat pohon silsilah keluarga, ungkapan aritmatika yang setiap operatornya
dipasang sebagai simpul pencabangan dan operand-operandnya sebagai subpohon, dll.
Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double
linkedlist.
Tree merupakan struktur hirarkis dari sebuah susunan data. Dalam tree,kita
mempunyai sebuah Root yang nantinya akan menjadi awal dari tree tersebut. Untuk tree,
kita juga membutuhkan struct. Ada banyak jenis-jenis Tree, tapi yang akan kita pelajari
saat ini adalah implementasi dari Binary Tree, yaitu Tree yang hanya memiliki 2 tangan.
- 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. Tree juga adalah suatu graph yang acyclic, simple, connected
yang tidak mengandung loop.
- Pembentukan Tree
Langkah-langkah Pembentukan Binary Tree
1. Siapkan node baru
a. alokasikan memory-nya
b. masukkan info-nya
c. set pointer kiri & kanan = NULL
2. Sisipkan pada posisi yang tepat
penelusuran utk menentukan posisi yang tepat; info yang nilainya lebih besar
dari parent akan ditelusuri di sebelah kanan, yang lebih kecil dari parent akan
ditelusuri di sebelah kiri
penempatan info yang nilainya lebih dari parent akan ditempatkan di sebelah
kanan, yang lebih kecil di sebelah kiri
SEARCHING
- Adapun Cara Kerja Metode Binary Searching dalam Struktur data seperti berikut :
1. kunci akan selalu dibandingkan dengan data yang berada di tengah
(middle)
2. bila sama berarti data ketemu, bila tidak, akan “dilihat” apakah data ada di
sebelah “kiri” (artinya data lebih kecil dari data di tengah) atau di sebelah
“kanan” (artinya data lebih besar dari data di tengah).
3. Bila data ada di sebelah kiri, dilakukan pencarian dengan cara yang sama
(sementara data yang berada di sebelah kanan akan diabaikan).
4. Jadi, setiap kali pencarian, data selalu “dibelah” menjadi dua bagian
(biner), sampai pada “titik tertentu”(bila sama dengan titik tengah,
pencarian tidak dilakukan lagi, bila tidak, lakukan pencarian lagi sampai
pada perbandingan terakhir data juga tidak sama, berarti data tidak
ditemukan pada array).