Anda di halaman 1dari 36

BAB I

PENDAHULUAN

1.1 Latar Belakang


Kajian struktur data merupakan kajian yang sangat penting dalam bidang
informatika. Dan di zaman sekarang ini yang teknologinya semakin berkembang,
dibutuhkan struktur data yang efisien yang dapat meningkatkan kinerja program. Salah
satu bentuk struktur data yang berisi kumpulan data yang tersusun secarasekuensial,
saling bersambungan, dinamis dan terbatas adalah linked list (senarai berkait).
Suatu linked list adalah suatu simpul (node) yang dikaitkan dengan simpul yang
lain dalam suatu urutan tertentu. Suatu simpul dapat berbentuk suatu struktur atau class.
Simpul harus mempunyai satu atau lebih elemen struktur atau class yang berisi data.
Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan
bantuan pointer. Dikatakan single (singly) linked apabila hanya ada satu pointer yang
menghubungkan setiap node. single artinya field pointer-nya hanya satu buah saja dan
satu arah.
Linked list adalah struktur data yang paling dasar. Linked list terdiri atas
sejumlah unsur-unsur dikelompokkan, atau terhubung, bersama-sama di suatu deret
yang spesifik. Linked list bermanfaat di dalam memelihara koleksi-koleksi data,
yang serupa dengan array.
Bagaimanapun juga, linked list dan array mempunyai perbedaan. Memakai
Linked list lebih bagus dibandingkan dengan array/larik baik dalam banyak hal. Secara
rinci, Linked list lebih efisien didalam melaksanakan penyisipan-penyisipan dan
penghapusan-penghapusan. Linked list juga menggunakan alokasi penyimpanan secara
dinamis, yang merupakan penyimpanan yang dialokasikan pada run time. Karena
di dalam banyak aplikasi,ukuran dari data itu tidak diketahui pada saat kompile, hal ini
bisa merupakan suatu atribut yang baik juga. Setiap node akan berbentuk struct dan
memiliki satu buah field bertipe struct yang sama, yang berfungsi sebagai pointer.
Dalam menghhubungkan setiap node, kita dapat menggunakan cara first create –
first access ataupun fisrt create – last access. Yang berbeda dengan deklarasi struct
sebelumnya adalah satu field bernama next, yang bertipe struct tnode. Hal ini dapat
membingungkan. Namun, satu hal yang jelas, variable next ini akan menghubungkan
kita dengan node di sebelah kita, yang juga bertipe struct tnode. Hal inilah yang
menyebabkan next harus bertipe struct tnode.

1
1.2 Rumusan Masalah
1. Data, Struktur Data, Tipe Data dan Operasi Data
2. Array
a. Pengertian
b. Karakterisistik Array
c. Keunggulan dan Kelemahan Array
d. Penggunaan Array
e. Bentuk-bentuk Array
f. Pengurutan Array
g. Operasi Dasar Pada Array
3. Queue
a. Pengertian
b. Operasi pada Queue
c. Macam-macam Queue
d. Penerapan Aplikasi Queue
e. Penerapan Queue Dalam Kehidupan Sehari-hari
f. Penerapan Aplikasi Queue Dalam Aplikasi Komputer
g. Penerapan Aplikasi Queue Dalam Sistem Produksi
h. Karakteristik Queue
i. Operasi-operasi Pokok Pada Queue
j. Operasi-operasi Pengaksesan Tambahan
k. Operasi-operasi Query Tambahan
l. Operasi-operasi Terhadap Antrian Q
m. Ilustrasi Queue
n. Contoh Queue
o. Operasi-operasi Standar Pada Queue

1.3 Tujuan Penulisan Makalah


Pembuatan makalah ini bertujuan untuk menyelesaikan tugas EKT 1 pada mata kuliah
“Struktur Data”.

2
BAB II
PEMBAHASAN

2.1 Data, Struktur Data, Tipe Data dan Operasi Data


2.1.1 Data
Data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang
kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara,
gambar, sinyal atau simbol. Pengertian data ini menyiratkan suatu nilai yang bias
dinyatakan dalam bentuk konstanta/variable. Konstanta digunakan untuk menyatakan
nilai tetap sedangkan variable digunakan dalam program untuk menyatakan nilai yang
dapat berubah-ubah selang eksekusi berlangsung.
Ada empat istilah data yaitu :
1. Tipe data adalah jenis atau macam data di dalam suatu variable dalam
bahasa pemrograman.
2. Objek data mengacu kumpulan elemen, D (domain).
3. Representasi data : Suatu mapping dari struktur data ‘d’ ke suatu set ke
struktur data ‘e’ (d===e) misal bolean di representasikan dalam 0 dan 1.
4. Struktur data biasa dipakai untuk mengelompokan beberapa informasi.

2.1.2 Struktur Data


Struktur data adalah suatu koleksi/kelompok data yang dapat di karakteristikan
oleh organisasi serta operasi yang di definisikan terhadapnya. Dalam teknik
pemrograman, struktur data berarti tata letak yang berisi kolom-kolom data, baik itu
kolom yang tanpak oleh pengguna (user) ataupun kolom yang hanya digunakan untuk
keperluan pemrograman yang tidak tampak oleh pengguna.
Struktur data meliputi :
• Struktur data sederhana, misalnya array dan record.
Struktur data majemuk, yang terdiri :
• Linier : Stack, Queue, serta List dan Multilist
• Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat di dalam proses pemrograman akan
menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program
secara keseluruhan lebih efisien dan sederhana.

3
Struktur data standar yang biasa digunakan oleh teknik informatika adalah :
• ADT, Array, Struk
• List linier (Linked List) dan variasinya
• Multilist
• Stack (Tumpukan)
• Queue (Antrian)
• Tree (Pohon)
• Graph (Graf)
Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi
kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom
yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh
pengguna.Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan
(record). Lebar kolom untuk data dapat berubah dan bervariasi. Ada kolom yang
lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom
yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk
pengolahan database (misalnya untuk keperluan data keuangan) atau untuk pengolah
kata (word processor) yang kolomnya berubah secara dinamis. Contoh struktur data
dapat dilihat pada berkas-berkas lembar-sebar (spreadsheet), pangkal-data
(database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan
berkas dengan teknik tertentu yang memanfaatkan struktur data.

2.1.3 Tipe Data


Tipe data adalah himpunan yang dapat anda temui pada semua data. Dengan
memahami tipe data, anda juga dapat menentukan suatu nilai dapat dimiliki dari data
tersebut ataukah tidak. Salah satu bentuk penerapan tipe data dalam kehidupan sehari–
hari adalah pada bilangan bulat. Karena pada hakikatnya penulisan suatu
bilangan pada data juga dapat bermacam–macam, seperti 5,5 atau ¾. Bilangan yang
kami sebutkan adalah termasuk bilangan tak bulat, tidak seperti bilangan bulat 5, 6, 1,
3 dan masih banyak lagi.
Lebih kongkritnya lagi suatu tipe data dapat ditemui dalam dunia pemrograman
komputer. Di dalam tahap awal pembuatan program, anda harus menentukan terlebih
dahulu tipe data yang digunakan. Contoh tipe data yang sering digunakan para
programmer : Integer, Real, Double, Char, String dan masih banyak lagi lainnya.

4
Setelah menentukan tipe data yang akan digunakan seorang programmer akan
langsung mendeklarasikan di awal tahapnya. Hal ini ditujukan untuk memberi batasan
atau kategori khusus pada data yang akan digunakan oleh program. Penentuan
memori juga dapat ditentukan ketika tipe data sudah dipilih.
Tipe Data memiliki 2 jenis :
1. Tipe Data Primitive (Sederhana)
Tipe data primitive adalah tipe data yang hanya mampu menyimpan satu nilai
pada setiap satu variabel. tipe data ini ini merupakan tipe data dasar yang sering
digunakan program. Contoh tipe data primitive, yaitu :
a. Numeric
Tipe numeric ini digunakan pada variable untuk menyimpan nilai dalam
bentuk angka. Tipe data ini terbagi menjadi “Integer” dan “Real”. Integer
(int), merupakan tipe data bilangan bulat.
Ukuran memori
Tipe Range Nilai
(dalam byte)
Byte 1 0..255
Shortint 1 -128..127
Integer 2 -32768..32767
Word 2 0..65535
Longint 4 -2147483648..2147483647

Tabel Kategori Integer


b. Char/character
Merupakan tipe data yang menyimpan hanya satu (1) digit karakter,
karena ukuran satu digit itu satu byte (dan 1 byte itu = 8 bit). untuk penulisan
karakter menggunakan petik tunggal ( ‘ ) di depan dan belakang karakter yang
ditulis. contoh-nya seperti ini :

Jenis Karakter Contoh penggunaan

Huruf ‘a’, ‘b’, ‘D’, ‘Z’


Angka ‘1’, ‘2’, ‘3’, dst
Tanda baca Titik (.), koma (,), titi koma (;), dst
Khusus $, %, #, @, dst

5
c. Boolean
Merupakan tipe data logika yang hanya bernilai true (benar) dan false
(salah). Tipe data ini memakai memori paling kecil.

salah satu contoh penggunaan boolean

2. Tipe Data Composite


Tipe data ini merupakan lawan atau kebalikan dari tipe data primitive. Tipe ddata
composite dapat menampung banyak nilai. Antara lain :
a. Array
Array atau disebut larik adalah tipe data yang terstruktur, meskipun
sederhana array mampu menyimpan data dengan tipe yang sama (homogen)
didalam sebuah variable.
b. Record atau Struct
Seperti array, record atau struct termasuk data komposit. Record biasa
dikenal pada bahasa pemrograman Pascal atau Delphi sedangkan struct lebih
dikenal di C++. Lain hal dengan array, tipe data record menampung tipe data
yang berbeda-beda (heterogen).
c. Image
Tipe data ini adalah tipe data grafik seperti contohnya grafik
perkembangan suatu populasi. pada bahasa pemrograman modern yang
berbasis visual, tipe data ini sudah sangat didukung.
d. Date Time
Nilai data date dan time disimpan dalam format yang spesifik. Dengan
variable atau konstanta yang dideklarasikan dapat disimpan dengan baik dalam
bentuk tipe data “date” maupun “time”. Tipe data ini termasuk kelompok tipe
data komposit, karena terbentuk dari beberapa tipe data.
e. Object
Tipe data ini menyimpan yang berhubungan dengan obyek-obyek yang
biasa ada pada bahasa pemrograman VB, Delphi dan bahasa pemrograman lain
yang berbasis GUI (Graphical User Interface). Contoh-nya : jika sebuah form
memiliki control Command button, kita beri nama Command1.

6
f. Subrange
Tipe data bilangan yang mempunyai range nilai tertentu yang sudah
ditentukan oleh seorang programmer. Biasanya, tipe data ini memiliki batas
maksimum dan minimum.
g. Enumerasi
Tipe data ini mempunyai elemen-elemen yang harus disebutkan satu per-
satu dan memiliki nilai konstanta berupa integer yang sesuai dengan
urutannya. Pada nilai konstanta-nya ini mewakili suatu nama variable yang
ditulis didalam kurung. Tipe data ini sering ditemui dalam bahasa Delphi dan
SQL.

Macam-macam tipe data dalam Pascal :


 Integer
Jenis data merupakan nilai bilangan bulat, yang terdiri atas integer
positif, integer negative dan nol. Pada turbo pascal jenis data ini dibagi atas
beberapa bagian.
 Real/float
Data numerik yang bukan termasuk integer, digolongkan dalam jenis
data real. Ditulis menggunakan titik decimal (atau koma decimal).
Dimasukkan ke dalam memori komputer memakai sistem floating
point, disebut Scientific Notation.
Penyajiannya terdiri dari : mantissa (pecahan) dan eksponen.
Contoh :
Di dalam sistem desimal, 123000 = 0.123 * 106 . Di sini 0,123 adalah
mantissa atau pecahan, sedangkan 6 adalah eskponennya.
Secara umum suatu bilangan real X dituliskan M * RE. Di sini : M dijadikan
pecahan, R adalah radixnya dan E merupakan eksponennya.
 Boolean
Tipe data Boolean mempunya dua nilai yaitu true (benar) dan false (salah).
Nilao Boolean sangat penting digunakan untuk pengambilan dalam suatu
kejadian tertentu. Disebut juga jenis data logical.
o Operator Logika, yaitu : AND, OR, NOT.
- Operator AND akan menghasilkan nilai true, jika kedua operand bernilai
true.

7
- Operator OR akan menghasilkan nilai true, jika salah satu operand
bernilai true.
- Operator NOT merupakan “precedence” dari operator AND dan OR.
Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT
harus dievaluasi sebelum operator AND dan OR.
o Ooperator Relasional, yaitu : >, <, >=, <=, <> dan =
Contoh : 6 < 8 = True
9 < 8 = False
 Character
Elemen dari suatu himpunan yang terdiri atas bilangan, abjad dan simbol
khusus. (0,1,...,8,9, A, B, ..., Y,Z, +, -,*,Ö, ...}. Ada banyak skema yang
digunakan untuk merepresentasikan karakter dalam storage. Pada umumnya
skema yang paling banyak digunakan adalah :
1. Extended Binary Coded Decimal Interchange (EBCDIC)
Digunakan kode 8 bit untuk menyatakan sebuah karakter. Jika dihitung,
kemungkinan kombinasi seluruhnya : 28 = 256.
2. American Standard Code for Information Interchange (ASCII)
Digunakan kode 7 bit untuk menyatakan sebuah karakter. Jika dihitung,
kemungkinan kombinasi seluruhnya : 27 = 128.
 String
Merupakan urut-urutan dari karakter yang terletak diantara tanda petik
tunggal. Nilai data string akan menempati memori sebesar banyaknya
karakter string ditambah dengan 1byte. Bila panjang dari suatu string
didalam deklarasi variable tidak disebutkan, maka dianggap panjangnya
adalah 255 karakter. Karakter yang digunakan untuk membentuk suatu string
disebut alfabet. Dalam penulisannya, suatu string berada dalam tanda
“aphosthrope”.
Contoh : himpunan alphabet A = {C,D,1}.
String yang dapat dibentuk dari alfabet di atas di antaranya :
‘CD1’,’CDD’,’DDC’,’CDC1’,... dan sebagainya, termasuk “null string” atau
“empty string”. Himpunan tak hingga dari string yang dibentuk oleh alfabet
A disebut Vocabulary, Notasi : VA atau A*. Jika suatu string dibentuk dari
alfabet {0,1}, maka string yang terbentuk disebut dengan “Bit String”.

8
Operasi Operator
Jumlah karakter dalam string LENGTH
Gabungan 2 buah string CONCAT
Sub bagian dari string SUBSTR
Menyisipkan string ke dalam string lain INSERT
Menghapus karakter dalam string DELETE

 LENGTH
Nilai dari operasi ini adalah suatu integer yang menunjukkan panjang dari
suatu string.
Notasi : LENGTH(S) = N (integer)
di sini S = String, N = integer
 CONCAT
Operasi ini bekerja terhadap dua string dan hasilnya merupakan resultan dari
kedua string tersebut. Jika S1 dan S2 masing-masing adalah suatu string,
maka bentuk operasi CONCATENATION dinotasikan dengan :
CONCAT(S1, S2).
Contoh : Misal S1 = ‘a1a2 ... aN’ dan S2 =‘b1b2 ... bM’
Maka CONCAT(S1,S2) = ‘a1a2 ... aNb1b2 ... bM’
String S1 = "Sistem" || CONCAT(S1, S2)= "SistemInformasi"
String S2 = "Informasi || LENGTH(CONCAT(S1, S2)) = 15
LENGTH(S1) + LENGTH(S2) =LENGTH(CONCAT(S1, S2))
6 + 9 = 15
15 = 15
 SUBSTR
Operasi ini adalah operasi membentuk string baru, yang merupakan bagian
dari string yang diketahui.
Notasi : SUBSTR(S, i, j)
di sini : S = string yang diketahui
i dan j = integer
i = posisi awal substring 1 < i < LENGTH(S)
j = banyak karakter yang diambil
0 < j < LENGTH(S) dan 0 < i+j-1 < LENGTH(S)

9
 INSERT
Operasi ini adalah untuk menyisipkan suatu string ke dalam string lain.
Bentuk umumnya adalah: INSERT(S1,S2,i). S1 dan S2 masing-masing adalah
suatu string dan i adalah posisi awal S2 pada S1.
Contoh : Misalkan : S1 = ‘a1a2 ... aN’
S2 = ‘b1b2 ... bM’
INSERT(S1, S2,3) = ‘a1a2b1b2 ... bMa3a4... aN’
String S1 = "Sistem"
String S2 = "Informasi"
INSERT(S1,S2,4) = “SisInformasitem”
INSERT(S2,S1,4) = “InfSistemormasi”
 DELETE
Operasi ini digunakan untuk menghapus sebagian karakter dalam suatu
string.
Bentuk umumnya adalah: DELETE(S,i,j) -> menghapuskan sebagian
karakter dalam string S, mulai dari posisi i dengan panjang j.
Contoh : Diberikan string S = ‘a1a2 ... aN’
DELETE(S,3,4) = ‘a1 a2 a7a8 ... aN’
String S = "Sistem Informasi”
i = 4, j = 9
DELETE(S,i,j) = “Sismasi”
DELETE(S,j,i) = “Sistem Imasi”
String S = “SistemInformasi”
DELETE(S, 4, 5) = “Sisformasi”
DELETE(S, 5, 4) = “Sistformasi”

2.1.4 Operasi Data


Di dalam sebuah disk, basis data dapat diciptakan dan dapat pula ditiadakan. Di
dalam sebuah disk, kita dapat pula menempatkan beberapa (lebih dari satu) basis data.
Sementara dalam sebuah basis data, kita dapat menempatkan satu atau lebih file/tabel.
Pada file/tabel inilah sesungguhnya data dapat disimpan/ditempatkan. Setiap basis
data umumnya dibuat untuk mewakili sebuah semesta data yang spesifik. Misalnya,
ada basis data kepegawaian, basis data akademik, basis data inventori (pergudangan),
dan sebagainya. Sementara dalam basis data akademik, misalnya kita dapat

10
menempatkan file mahasiswa, file mata kuliah, file dosen, file jadwal, file kehadiran,
file nilai, dan seterusnya.
Karena itu, operasi-operasi dasar yang dapat kita lakukan berkenaan dengan basis data
dapat meliputi:
• Pembuatan basis data baru (create database), yang identik dengan
pembuatan lemari arsip yang baru.
• Penghapusan basis data (drop database), yang identik dengan perusakan
lemari arsip (sekaligus beserta isinya jika ada).
• Pembuatan file/tabel baru ke suatu basis data (create table), yang identik
dengan penambahan map arsip baru ke sebuah lemari arsip yang telah ada.
• Penghapusan file/tabel dari suatu basis data (drop table), yang identik
dengan perusakan map arsip lama yang ada di sebuah lemari arsip.
• Penambahan/pengisian data baru ke sebuah file/tabel di sebuah basis data
(insert), yang identik dengan penambahan lembaran arsip ke sebuah map
arsip.
• Pengambilan data dari sebuah file/tabel (retrieve/search), yang identik
dengan pencarian lembaran arsip dari sebuah map arsip.
• Pengubahan data dari sebuah file/tabel (update), yang identik dengan
perbaikan isi lembaran arsip yang ada di sebuah map arsip.
• Penghapusan data dari sebuah file/tabel (delete), yang identik dengan
penghapusan sebuah lembaran arsip yang ada di sebuah map arsip.
Operasi yang berkenaan dengan pembuatan objek (basis data dan tabel)
merupakan operasi awal yang hanya dilakukan sekali dan berlaku seterusnya. Sedang
operasi-operasi yang berkaitan dengan isi tabel (data) merupakan operasi rutin yang
akan berlangsung berulang-ulang dan karena itu operasi-operasi inilah yang lebih
tepat mewakili aktivitas pengelolaan (management) dan pengolahan (processing) data
dalam basis data.

2.2 Array
2.2.1 Pengertian
Array adalah kumpulandarinilai-nilai data bertipe sama dalam urutan tertentu
yang menggunakan sebuah nama yang sama Nilai-nilai data disuatu array disebut
dengan elemen-elemen array Letak urutan dari elemen-elemen array di tunjukkan oleh
suatu subscript atau indek.

11
2.2.2 Karakteristik Array
• Mempunyai batasan dari pemesanan alokasi memori (bersifat statis)
• Mempunyai tipe data sama (bersifat homogen)
• Dapat diakses secara acak

2.2.3 Keunggulan dan Kelemahan Array


Keunggulan :
• Array sangat cocok digunakan untuk pengaksesan acak (random). Karena
sembarang elemen di array dapat diacu secara langsung tanpa melalui elemen-
elemen lain.
• Jika berada di suatu lokasi elemen, maka sangat mudah untuk menelusuri ke
elemen-elemen tetangga, baik elemen sebelumnya ataupun elemen berikutnya.
• Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus
terjaga, maka penggunaan penyimpanannya sangatlah efisien.

Kelemahan :
• Array selalu bertipe homogen. Kita tidak dapat mempunyai array diaman
satu elemen adalah karakter, elemen lain bilangan dan elemen lain adalah
tipe-tipe data yang lainnya yang berbeda.
• Kebanyakan bahasa pemrograman mengimplementasikan array statik yang
sulit diubah ukurannya di saat eksekusi. Bila penambahan dan pengurangan
terjadi secara terus menerus, maka representasi statis adalah sebagai berikut:
~ Tidak efisien dalam penggunaan memori.
~ Menyia-nyiakan banyak waktu saat komputasi.
~ Pada suatu aplikasi, representasi statis tidak dimungkinkan.

2.2.4 Penggunaan Array


• Array digunakan untuk suatu database, contoh : tabel.
• Array digunakan untuk operasi matematika seperti vektor.
• Digunakan dalam bentuk struktur data lain, contohnya list.

2.2.5 Bentuk-bentuk Array


1. Array Satu Dimensi
Array satu dimensi yaitu kumpulan elemen-elemen identik yang hanya terdiri
dari satu baris atau hanya satu kolom saja alamat penyimpanan data (indeks).

12
Elemen-elemen tersebut memiliki tipe data yang sama, tetapi isi dari elemen
tersebut boleh berbeda.
Bentuk umum : Tipe_data namaArray[n] = {elemen0, elemen1, elemen2,…..,n};
n = jumlah elemen. Contoh pada progam : int ukur[5] = {39, 40. 41, 38, 40};
– int adalah tipe data yang berupa bilangan bulat.
– Ukur adalah nama variabel array.
– [5] adalah ukuran untuk menyatakan jumlah maksimal elemen array.
– {..} adalah tempat pemberian nilai/elemen array.
2. Array Dua Dimensi
Array dua dimensi sering digambarkan sebagai sebuah matriks, merupakan
perluasan dari array satu dimensi. Jika array satu dimensi hanya terdiri dari sebuah
baris dan beberapa kilom elemen, maka array dua dimensi terdiri dari beberapa
baris dan beberapa kolom elemen bertipe sama sehingga dapat digambarkan
sebagai berikut:
Bentuk umum : Tipe_data namaArray [m][n] = {{a,b,…z},{1,2,…,n-1}};
contoh : int lulus[4][3];
– Nilai 4 untuk menyatakan banyaknya baris dan 3 untuk menyatakan
banyaknya kolom.
Pendeklarasian array dua dimensi hampir sama dengan pendeklarasian array
satu dimensi, kecuali bahwa array dua dimensi terdapat dua jumlah elemen yang
terdapat dikurung kurung siku dan keduanya boleh tidak sama. Elemen array dua
dimensi diakses dengan menuliskan kedua indeks elemennya dalam kurung.
Pemetaan (mapping) array dua dimensi ke storage :

Terbagi dua cara pandang (representasi) yang berbeda :


1) @M[i][j] = M[0][0] + {(j – 1) * K + (i – 1)} * L
Secara kolom per kolom (coloumn major order / CMO)

2) @M[i][j] = M[0][0] + {(i – 1) * N + (j – 1)} * L


Secara baris per baris (row major order / RMO)
Keterangan :
• @M[i][j] = Posisi array yang di cari.
• M[0][0] = Posisi alamat awal indeks array.
• i = Baris
• j = Kolom
13
• L = Ukuran memory type data
• K = Banyaknya elemen per kolom
• N = Banyaknya elemen per baris.
3. Array Multi Dimensi
Array ini seperti array dimensi dua tetapi dapat memiliki ukuran yang lebih
besar. Sebenarnya array dimensi banyak ini tidak terlalu sering digunakan, tetapi
sewaktu-waktu kalau dimensi yang dibutuhkan banyak, maka array ini sangat
memegang peranan yang penting. Bentuk umum pendeklarasian array
multidimensi: Tipe_data namaArray[ukuran1][ukuran2]…[ukuranN];
Sebagai contoh : int data_huruf[2][8][8];

2.2.6 Pengurutan Array


Pengurutan atau sorting adalah proses yang paling sering dilakukan dalam pengolahan
data, pengurutan dibedakan menjadi dua, yaitu :
1) Pengurutan internal
Pengurutan dilakukan terhadap sekumpulan data di media memory internal
komputer di mana data dapat diakses elemennya secara langsung.
2) Pengurutan eksternal
Pengurutan data di memory sekunder. Biasanya data bervolume besar sehingga
tidak mampu dimuat semuanya di memory utama.

2.2.7 Operasi Dasar Pada Array


Operasi terhadap elemen array dilakukan dengan pengaksesan langsung. Nilai di
masing-masing posisi elemen dapat di ambil dan nilai dapat disimpan tanpa melewati
posisi-posisi lain.
Terdapat dua operasi, yaitu :
1) Operasi terhadap satu elemen/posisi array
2) Operasi terhadap array sebagai keseluruhan
a) Dua operasi paling dasar terhadap satu elemen/posisi adalah :
• Penyimpanan nilai elemen ke posisi tertentu di array
• Pengambilan nilai elemen dari posisi tertentu di array
b) Operasi-operasi dasar terhadap array secara keseluruhan adalah :
• Operasi penciptaan
• Operasi penghancuran
• Operasi pemrosesan tranversal

14
• Operasi pencarian (table look-up)
• Operasi sorting
 Penyimpanan dan Pengambilan Nilai
Saat penyimpanan dan pengambilan nilai array, biasanya bahasa pemrogaman
menyediakan sintaks tertentu untuk penyimpanan dan pengambilan nilai elemen
pada posisi tertentu di array.
Contoh : A[5] = 78, berarti penyimpanan nilai 78 ke posisi ke-5 dari array A
C = A[5], berarti pengambilan nilai elemen posisi ke-5 dari array A
 Penciptaan dan Penghancuran
Operasi penciptaan biasa disebut inisialisasi. Operasi ini untuk
mempersiapkan struktur data untuk operasi-operasi berikutnya. Operasi
penghancuran menyatakan ketidak berlakuan struktur data atau membebaskan
memory, menyerahkan memory ke manajemen memory agar dapat di pergunakan
keperluan lain. Operasi penghancuran penting terutama bila struktur data di
implementasikan secara dinamis menggunakan pointer
 Pemrosesan Transversal
Operasi pemrosesan transversal adalah pemrosesan mengolah seluruh elemen
secara sistematik.
 Pencarian di Array (table look-up)
Pencarian di array (table look-up) adalah proses pencarian suatu nilai di array.
Klasifikasi pencarian di array adalah :
1) Pencarian sekuen (sequential searching), yaitu :
a) Tanpa boolean, terbagi :
• Tanpa sentinen
• Dengan sentinen
b) Menggunakan boolean
2) Pencarian secara biner/dokotom (binary = dochotomy searching).
2.2.8 Deklarasi Array
Ada tiga hal yang harus diketahui dalam pendeklarasian, yaitu :
a. Type data array.
b. Nama variable array.
c. Subkrip / index array.

15
Contoh Deklarasi Array adalah sebagai berikut :
int A[10], artinya variabel A adalah kumpulan data sebanyak 10 bilangan bertipe
integer.

2.3 Queue
2.3.1 Pengertian
Queue jika diartikan secara harfiah, queue berarti antrian, Queue merupakan
suatu struktur data linear. Konsepnya hampir sama dengan Stack, perbedaannya
adalah operasi penambahan dan penghapusan pada ujung yang bebeda.
Pada Stack atau tumpukan menggunakan prinsip “Masuk terakhir keluar
pertama”atau LIFO (Last In First Out), Maka pada Queue atau antrian prinsip yang
digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out).
Data-data di dalam antrian dapat bertipe integer, real, record dalam bentuk sederhana
atau terstruktur.
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. Contohnya, ialah dalam sebuah antrian pembelian tiket
bagi yang pertama masuk maka dia pulalah yang pertama keluar/selesai. Untuk
penyisipan (INSERT) hanya dapat dilakukan pada satu sisi yaitu sisi belakang
(REAR), sedangkan untuk penghapusan (REMOVE) pada sisi depan (FRONT) dari
list.
Queue/antrian adalah ordered list dengan penyisipan di satu ujung, sedang
penghapusan di ujung lain. Ujung penyisipan biasa disebut rear/tail, sedang ujung
penghapusa disebut front/head. Fenomena yang muncul adalah elemen yang lebih
dulu disisipkan akan juga lebih dulu diambil. Queue merupakan kasus khusus ordered
list. Dengan karakteristik terbatas itu maka kita dapat melakukan optimasi
representasi ADT Queue untuk memperoleh kerja paling optimal.
Misalnya Queue Q= (a1,a2,a3…,an), maka :
1. Elemen a1 adalah elemen paling depan
2. Elemen ai adalah diatas elemen ai-1, di mana 1<i<n.
3. Elemen an adalah elemen paling belakang

16
Head (Font) menunjuk ke awal antrian Q (elemen terdelapan), sedangkan Tail
(Rear) menunjuk akhir antrian Q (elemen paling belakang). Disiplin FIFO
pada Queue berimplikasi jika elemen A, B, C, D, E dimasukkan ke Queue, maka
penghapusan/ pengambilan elemen akan terjadi dengan urutan A, B, C, D, E.
Sebagai gambaran, cara kerja queue dapat disamakan pada sebuah antrean di
suatu loket dimana berlaku prinsip ‘Siapa yang duluan antre dia yang akan pertama
kali dilayani‘, sehingga dapat dikatakan prinsip kerja queue sama dengan prinsip
sebuah antrean.

2.3.2 Operasi Pada Queue


1. Create
Sama pada stack, prosedur ini berfungsi untuk mengosongkan queue dengan
cara meletakkan HEAD dan TAIL pada indeks array ke-(-1).
2. 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 -1, 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 -1), maka fungsi akan mengembalikan nilai 0 (false).
3. IsFull
Fungsi ini berfungsi untuk melakukan pengecekan terhadap queue,
apakah queuetersebut 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).
4. 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-(-1) (artinya queue masih
kosong), maka prosedur ini akan menempatkan HEAD dan TAIL pada indeks ke-
0 terlebih dahulu, baru setelah itu memasukkan data / nilai ke
dalam array data queue. Namun, jika posisi HEAD dan TAIL tidak berada pada

17
posisi ke-(-1), 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-0.
5. 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-0, maka ketika akan mengeluarkan/ menghapus data pada posisi paling
depan (pada posisi HEAD), prosedur ini akan menaikkan posisi HEAD ke
indeks array ke-1. Atau dengan cara menggeser semua elemen antrian kedepan
dan mengurangi TAIL dengan 1 penggeseran dilakukan dengan
menggunakan looping.
6. Clear
Untuk menghapus elemen-elemen queue dengan cara membuat Tail dan
Head= -1. Penghapusan elemen-elemen queue sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga
elemen-elemen queue tidak lagi terbaca. Berikut deklarasi prosedur clear:
7. Tampil
Untuk menampilkan nilai-nilai elemen queue menggunakan looping dari
HEAD sampai dengan TAIL.

2.3.3 Macam-macam Queue


1. Queue dengan Linier Array
Linear array adalah suatu array yang dibuat seakan-akan merupakan suatu garis
lurus dengan satu pintu masuk dan satu pintu keluar. Berikut ini diberikan deklarasi
kelas QueueLinear sebagai implementasi dari Queue menggunakan linear array.
Dalam prakteknya, kita dapat menggantinya sesuai dengan kebutuhan kita. Data
dikses dengan field data, sedangkan indeks item pertama dan terakhir disimpan dalam
variabel Head dan Tail. Konstruktor akan menginisialisasi nilai Head dan Tail dengan
-1 untuk menunjukkan bahwa antrian masih kosong dan mengalokasikan data
sebanyak MAX_QUEUE yang ditunjuk oleh data. Destruktor akan mengosongkan
antrian kembali dan mendealokasikan memori yang digunakan oleh antrian.

18
hapus elemen 1 2 …….. ke – n head sisip elementail

Di bawah ini diperlihatkan suatu queue yang akan menempati N elemen array
memori, serta cara pengurangan (delete) dan penambahan (added) elemen pada queue
tersebut.

Dapat dilihat bahwa setiap terjadi penghapusan elemen pada queue nilai (index)
dari Head bertambah satu (1) ; dapat ditulis HEAD = HEAD+1. Begitu pula bila
terjadi penambahan elemen pada queue nilai (index) Tail bertambah satu (1); dapat
ditulis TAIL = TAIL + 1.
Akan terjadi ketidak efisienan bila penambahan elemen sudah pada posisi index
N (Tail = N) maka tidak dapat lagi dilakukan penambahan elemen, sedangkan
dilokasi memori yang lain (nilai di bawah N) masih terdapat memori array yang
kosong. Untuk mengatasi hal tersebut maka kita bayangkan bahwa memori dari queue
tersebut berbentuk melingkar dimana kedua ujungnya saling bertemu atau disebut
juga dengan Circular Queue.

19
2. Queue Dengan Circular Array
Circular array adalah suatu array yang dibuat seakan-akan merupakan sebuah
lingkaran dengan titik awal (head) dan titik akhir (tail) saling bersebelahan jika
array tersebut masih kosong. Jika menggunakan array untuk queue seperti di atas,
maka ketika ada proses pengambilan (dequeue) ada proses pergeseran data. Proses
pergeseran data ini pasti memerlukan waktu apalagi jika elemen queue-nya
banyak. Oleh karena itu solusi agar proses pergeseran dihilangkan adalah dengan
metode circular array. Kelebihan jenis ini adalah alokasi penyimpanan data yang
optimal dan dinamis. Hal ini disebabkan penambahan maupun pengurangan data/
item antrian yang baru selalu menempati pos kosong yang disediakan sistem.

Aturan-aturan dalam queue yang menggunakan circular array adalah:


1) Proses penghapusan dilakukan dengan cara nilai depan (front) ditambah 1:
front=front+1.
2) Proses penambahan elemen sama dengan linear array yaitu nilai belakang
ditambah 1: tail=tail + 1.
3) Jika front = maks dan ada elemen yang akan dihapus, maka nilai front = 1.
4) Jika tail = maks dan front tidak 1 maka jika ada elemen yang akan
ditambahkan, nilai tail = 1.
5) Jika hanya tinggal 1 elemen di queue (front = tail), dan akan dihapus maka
front diisi 0 dan tail diisi dengan 0 (queue kosong).
Front dan Tail akan bergerak maju, jika:
Untuk penambahan.
Tail sudah mencapai elemen terakhir array akan memakai elemen pertama
array yang telah dihapus.
Untuk pngahapusan.
6) Front telah mencapai elemen terakhir array, maka akan menuju elemen
pertama jika antrian masih berisi elemen.

20
3. Queue Dengan Linked List
Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode
linked list yang digunakan adalah double linked list. Operasi-operasi Queue
dengan Double Linked List:
1. IsEmpty
Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong
atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih
menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong.
2. IsFull
Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau
masih bias menampung data dengan cara mengecek apakah Jumlah Queue
sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue sudah
penuh.
3. EnQueue
Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam
queue (head dan tail mula-mula meunjukkan ke NULL).
4. DeQueue
Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue.
Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling
depan (head).

21
2.3.4 Penerapan Aplikasi Queue
Meski Queue sangat sederhana, namun Queue merupakan kakas dasar
penyelesaian masalah-masalah besar. Penggunaan Queue yang utama adalah untuk
simulasi fenomena antrian di dunia nyata, serta fenomena antrian di pengolahan data.
2.3.5 Penerapan Queue Dalam Kehidupan Sehari-hari
1. Pada Pembelian Tiket
Dalam kehidupan sehari-hari kita bisa dapati melalui penerapan pembelian tiket
kereta api, tiket pesawat, tiket kapal laut, pembayaran tiket tol, pembayaran listrik,
pembayaran air, dan lain sebagainya. Saat mengantri di loket untuk membeli tiket.
Istilah yang cukup sering dipakai seseorang masuk dalam sebuah antrian adalah
enqueue. Dalam suatu antrian, yang datang terlebih dahulu akan dilayani lebih dahulu.
Istilah yang sering dipakai bila seseorang keluar dari antrian adalah dequeue.
Walaupun berbeda implementasi, tapi pada prinsipnya sama saja. Aplikasi dalam
pembelian tiket kereta api:
a. Enqueue : Seseorang membeli tiket melalui tempat pembayaran tiket yang
disediakan.
b. Dequeue : Setelah membeli tiket, langsung menuju tempat penungguan
kereta, dengan sebelumnya petugas memeriksa cek tiket tersebut.
c. Clear : Pembeli tiket tersebut telah terhapus dari antrian karena sudah
melewati pembayaran administrasi tersebut.
d. IsEmpty : Petugas tiket Kereta melihat tidak ada lagi yang ingin membeli tiket
kereta.
e. IsFull : Petugas Tiket Kereta melihat masih ada pembeli tiket kereta.
2.3.6 Penerapan Aplikasi Queue Dalam Aplikasi Komputer
1. Pada Aplikasi Download Manager IDM
Queue juga dipakai sebagai salah satu fitur dari Internet Download
Manager atau yang biasa disebut dengan IDM. Fitur ini sangat membantu bagi
para pecinta download. Fitur ini akan membantu pengguna untuk mendownload
file yang anda pilih satu-persatu, jadi sebanyak apapun anda mendownload, tetapi
akan tetap dibuat antrian atau istilahnya queueing. Sistem yang diterapkan dalam
fitur ini adalah pada saat download file, maka IDM akan mendownload satu per
satu, hingga download file selesai maka baru akan secara otomatis mendownload
file berikutnya.

22
2. 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.

2.3.7 Penerapan Aplikasi Queue Dalam 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.

2.3.8 Karakteristik Queue


Karakteristik penting antrian sebagai berikut:
1. Elemen antrian yaitu item-item data yang terdapat di elemen antrian.
2. Head/Front (elemen terdepan dari antrian).
3. Tail/Tear (elemen terakhir dari antrian).
4. Jumlah elemen pada antrian (count).
5. Status/ kondisi antrian

23
Ada beberapa kondisi yang bisa kita temukan dalam queue. Kondisi antrian yang
menjadi perhatian adalah:
1. Penuh
Bila elemen di antrian mencapai kapasitas maksimum antrian. Pada kondisi
ini, tidak mungkin dilakukan penambahan ke antrian. Penambahan elemen
menyebabkan kondisi kesalahan Overflow.
2. Kosong
Bila tidak ada elemen di antrian. Pada kondisi ini, tidak mungkin dilakukan
pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi
kesalahan Underflow.

2.3.9 Operasi-operasi Pokok Pada Queue


1) createQueue (Q), atau constructor menciptakan antrian kosong Q
2) addQueue (Q, X) memasukkan elemen X sebagai elemen akhir di Q.
3) removeQueue (Q, X)atau mengambil elemen depan di antrian Q ke elemenX.

2.3.10 Operasi-operasi Pengaksesan Tambahan


1. headQueue (Q), atau Front (Q, X) mengirim elemen terdepan tanpa menghapus.
2. tailQueue (Q), mengirim elemen tanpa menghapusnya.

2.3.11 Operasi-operasi Query Tambahan


1. isEmptyQueue (Q), mengirim apakah antrian Q adalah kosong.
2. isFullQueue (Q), mengirim apakah antrian Q adalah penuh bila kapasitas antrian
Q didefinisikan.
3. isOverflowQueue (Q), mengirim apakah antrian Q telah mengalami overflow.
4. isUnderflowQueue (Q), mengirim apakah antrian Q mengalami underflow.

2.3.12 Operasi-operasi Terhadap Antrian Q


1. sizeQueue (Q), mengetahui jumlah elemen di antrian Q.
2. isEqualQueue (Q1, Q2), mengirim apakah antrian Q1 dan Q2 sama isinya.
Jumlah operasi pokok Queue tidak banyak. Dengan demikian, sangat sederhana
untuk menyatakan apa pun mengenai implementasinya.

24
2.3.13 Ilustrasi Queue

25
2.3.14 Contoh Queue

26
2.3.15 Operasi-operasi Standar Pada Queue
1. membuat queue atau inisialisasi.
2. mengecek apakah queue penuh.
3. mengecek apakah queue kosong.
4. memasukkan elemen ke dalam queue atau InQueue (Insert Queue).
5. Menghapus elemen queue atau DeQueue (Delete Queue).
2.3.16 Implementasi Queue Dengan Array
Seperti halnya pada tumpukan, maka dalam antrian kita juga mengenal adadua
operasi dasar, yaitu menambah data baru yang akan kita tempatkan di bagian
belakangantrian dan menghapus data yang terletak di bagian depan antrian.
Disamping itu seringkalikita juga perlu melihat apakah antrian mempunyai isi atau
dalam keadaan kosong. Operasi penambahan data baru selalu bisa kita
lakukan karena tidak ada pembatasan banyaknya datadari suatu antrian. Tetapi untuk
menghapus data, maka kita harus melihat apakah antriandalam keadaan kosong atau
tidak. Tentu saja kita tidak mungkin menghapus data dari suatuantrian yang sudah
kosong.
Untuk menyajikan antrian menggunakan array, maka kita membutuhkan deklarasi
antrian, misalnya sebagai berikut :
#define MAXQUEUE 100;
typedef int ItemType;
typedef struct{
int Count;
int Front;
int Rear;
ItemType Item[MAXQUEUE];
}Queue;
Front, menunjukkan item yang paling depan, yaitu data yang akan dihapus jika
dilakukan operasi penghapusan. Setelah kita melakukan penghapusan, kita
melakukan increment pada indeks Front, sehingga indeks menunjuk pada posisi
berikutnya. Jika indeks ini jatuh pada angka tertinggi, yaitu angka paling maksimum
dari array (N), maka kita melakukan setting ulang ke 0. Array Item[0:N-1] berisi N
item yang merupakan isi dariantrian. Berada pada posisi 0:N-1dimana pada posisi ini
dapat di indikasikan dua pengenal, yaitu Front dan Rear. Count menunjukkan jumlah

27
item dalam antrian. Rear menunjukan posisi dimana setelahnya dapat dimasukan
item berikutnya.
Representasi antrian lengkap dengan operas-operasi yang merupakan karakteristik
antrian adalah sebagai berikut :
#include <conio.h>
#include <stdlib.h>
#define MAXQUEUE 100;
typedef int ItemType;
typedef struct{
int Count;
int Front;
int Rear;
ItemType Item[MAXQUEUE];
}Queue;
Void InitializeQueue(Queue *Q){
Q->Count = 0;
Q->Front = 0;
Q->Rear = 0;
32 }
int Empty(Queue *Q){
return(Q->Count == 0); }
int Full(Queue *Q){
return(Q->Count == MAXQUEUE); }
void Insert(ItemType ins, Queue *Q) {
if (Q->Count == MAXQUEUE)
printf(“Tidak dapat memasukan data! Queue Penuh!”);
else {
Q->Item[Q->Rear] = ins;
Q->Rear = (Q->Rear + 1) % MAXQUEUE;
++ (Q->Count); }}
void Remove(Queue *Q, ItemType *rm) {
if (Q->Count == 0)
printf(“Tidak dapat mengambil data! Queue Kosong!”);
else {

28
*rm = Q->Item[Q->Front];
Q->Front = (Q->Front + 1); % MAXQUEUE;
--(Q->Count);
}}
Jika kita meletakkan beberapa item yang baru dari antrian dalam sebuah array,
makakita menambahkannya pada Rear dan memindah item dari Front. Dengan
penambahan dan pengurangan item ini, permasalahan akan terjadi jika ukuran dari
array habis. Kita bisa keluar dari permasalahan ini jika kita merepresentasikan
antrian secara circular. Cara mensimulasikan antrian secara circular dalam array
linear menggunakan arithmetic modular. Arithmetic modular menggunakan ekspresi
rumus (X%N) untk menjaga besarnya nilai X pada range 0:N1. Jika indeks telah
sampai pada N dengan penambahan atau pengurangan tersebut. maka indeks akan
diset pada angka 0. Hal yang sama juga dilakukan pada Front jika dilakukan
pengambilan item dari antrian. Setelah mengambil item dari antrian, kita melakukan
increment terhadap Front untuk penunjukan pada posisi sesudahnya. Apabila indeks
berada pada N, maka indeks diset juga pada angka 0.
Perintah dibawah ini merupakan perintah yang menunjukan proses Arithmatic
Modular yang telah ditetapkan pada antrian.
Front = (Front + 1)% N;
Rear = (Rear + 1)% N;

2.3.17 Implementasi Queue Dengan Linked List


Antrian yang direpresentasikan dengan linked list mempunyai beberapa variasi.
Padakesempatan kali ini hanya direpresentasikan satu macam saja. Linked list yang
digunakan disini menggunakan struktur yang berisi pointer yang menunjuk pada
simpul Front dan Reardari linked list. Masing-masing simpul berisi data dari antrian
dan juga link yang menunjuk pada simpul selanjutnya dari linked list, yang
dinamakan Link.
#include
#include
typedef int ItemType;
typedef struct QueueNodeTag { ItemType Item;
struct QueueNodeTag *Link;
}QueueNode;
typedef struct {

29
QueueNode *Front;
QueueNode *Rear;
}Queue;
void InitializeQueue(Queue *Q){
Q->Front = NULL;
Q->Rear = NULL;}
int Empty(Queue *Q){
return(Q->Front == NULL);}
int Full(Queue *Q){
return 0;}
void Insert(ItemType R, Queue *Q){
QueueNode *Temp;
Temp = (QueueNode *) malloc(sizeof(QueueNode));
if (Temp == NULL) {
printf("Queue tidak dapat tercipta");
} else {
Temp->Item = R;
Temp->Link = NULL;
if (Q->Rear == NULL){
Q->Front = Temp;
Q->Rear = Temp;
} else {
Q->Rear->Link=Temp;
Q->Rear = Temp; } }} 35
void Remove(Queue *Q, ItemType *F){
QueueNode *Temp;
if (Q->Front == NULL){
printf("Queue masing kosong!");
} else {
*F = Q->Front->Item;
Temp = Q->Front;
Q->Front = Temp -> Link;
free(Temp);
if(Q->Front == NULL) Q->Rear = NULL; }}

30
2.3.18 Contoh Program Queue
Listing Program
#include
#include
#define MAX 8
typedef struct{
int data[MAX];
int head;
int tail;
} Queue;
Queue antrian;
void Create(){
antrian.head=antrian.tail=-1;
}
int IsEmpty(){
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsFull(){
if(antrian.tail==MAX-1) return 1;
else return 0;
}
void Enqueue(int data){
if(IsEmpty()==1){
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;
printf("%d masuk!",antrian.data[antrian.tail]);
void Tampil(){
if(IsEmpty()==0){
int i;
for(i=antrian.head;i<=antrian.tail;i++){
printf("%d ",antrian.data[i]);

31
}
}else printf("data kosong!\n");
}
} else if(IsFull()==0){
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("%d masuk!",antrian.data[antrian.tail]);
}
}
int Dequeue(){
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head;i<=antrian.tail-1;i++){
antrian.data[i] = antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear(){
antrian.head=antrian.tail=-1;
printf("data clear");
}
void Tampil(){
if(IsEmpty()==0){
int i;
for(i=antrian.head;i<=antrian.tail;i++) {
printf("%d ",antrian.data[i]);
}
}else printf("data kosong!\n");
}
void main(){
int pil;
int data;
Create();

32
do{
system("cls");
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Tampil\n");
printf("4. Clear\n");
printf("5. Exit\n");
printf("Pilihan = ");scanf("%d",&pil);
switch(pil){
case 1: printf("Data = ");scanf("%d",&data);
Enqueue(data);
break;
case 2: printf("Elemen yang keluar : %d",Dequeue());
break;
case 3: Tampil();
break;
case 4: Clear();
break;
}
getch();
} while(pil!=5);
}

33
BAB III

PENUTUP

3.1 Kesimpulan
Struktur adalah sekumpulan elemen-elemen data yang digabung menjadi suatu
kesatuan. Struktur array adalah kumpulan elemen-elemen data yang digabungkan
menjadi suatu kesatuan yang memiliki tipe homogen (sama). Array merupakan bagian
dari struktur data yaitu termasuk ke dalam struktur data sederhana yang dapat
didefinisikan sebagai pemesanan alokasi memori sementara pada komputer.
Apabila kita membuat progam dengan data yang yang sudah kita ketahui batasnya,
maka kita menggunakan array (tipe data statis), namum apabila datanya belum kita
ketahui batasnya maka gunakan pointer (tipe data dinamis). Elemen-elemen array
tersusun secara sekuensial dalam memori komputer. Array dapat berupa satu dimensi,
dua dimensi, ataupun multidimensi.
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.
Sebuah queue dalam program setidaknya harus mengandung tiga variabel,
yakni:head untuk penanda bagian depan antrian, tail unttuk penanda bagian belakang
antrian, danarray data untuk menyimpan data-data yang dimasukkan ke dalam queue
tersebut.
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.

34
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.

35
DAFTAR PUSTAKA

Achmad Syah Hidayat. Januari 2014. https://medium.com/@achmadsyah/jenis-jenis-tipe-


data-apa-aja-sih-7cd35e999f5a

Ananda Syaviri. Januari, 2014. http://www.academia.edu/5942504/MAKALAH_ARRAY_print

Anas Farikh, makalah struktur data. 2013. https://dokumen.tips/documents/makalah-antrian-


5617fa1724e76.html

Definisi Array, 2012. https://pramitananda.wordpress.com/pemograman-c/array-2/array/

Densyswanto88, struktur data queue. December 20, 2012. https://denysiswanto88.wordpress.


com/2012/12/20/struktur-data-queueantrian/

Firmansyah, Tipe data. https://www.nesabamedia.com/pengertian-tipe-data/

Nur Fadilah Derman. http://dhyella.blogspot.com/2013/12/makalah-tipe-data-struktur-data.


html

Nursanti, 2016. http://blognyonyait.blogspot.com/2017/05/makalah-sistem-antrian-queue-


dengan.html

Nur Santoso, struktur data-pointer-queue-stack- linked list. https://www.academia.edu


/7122481/Makalah_Struktur_Data

Rendi Gustama, data dan struktur data. http://www.academia.edu/24525172/Makalah_


struktur_data

Sopyan Tirto Laksono. May 10, 2015. http://2114r0879-strukturdata-septialutfi.blogspot.com


/2015/05/makalah-tentang-array.html

Sudarsono Sihatang. May 15, 2011. http://wwwpemograman-hotang.blogspot.com/2011/05/


makalah-struktur-data.html

Sukisno, S.Kom., M.Kom (Dosen Struktur Data)

Yudi Herdiana, operasi dasar basis data. october 24, 2018. https://materibasisdata.blogspot.
com/2010/10/operasi-dasar-basis-data.html

36