DOSEN PEMBIMBING
Nisa miftachurohmah, S.kom., M.Si
PENYUSUN
SITI JAMILATUL MUADDIBAH
(14.1.03.03.0024)
FAKULTAS TEKNIK
PROGRAM STUDI SISTEM INFORMASI
UNIVERSITAS NUSANTARA PGRI
KEDIRI
2016
BAB 1
KONSEP DASAR STRUKTUR DATA
Pada C++ selalu terdapat fungsi utama, variabel global biasanya dideklarasikan di luar
fungsi utama tersebut.
Juga terdapat variabel Lokal. Variabel lokal hanya dikenali oleh suatu fungsi saja, artinya
variabel lokal tidak dikenal oleh lingkungan luar di dalam program yang dibuat.
Variabel lokal harus berada dalam lingkup fungsi tertentu.
Tipe Data
Di dalam bahasa pemrograman terdapat beberapa tipe data dasar yang telah
didefenisikan dan digolongkan :
- Tipe bilangan bulat(integer)
- Bilangan real(floating point)
- Tipe logika(boolean) dan
- Tipe karakter/teks(character/string).
Pada saat mendeklarasikan sebuah variabel, secara otomatis harus mendeklarasikan tipe
data yang dapat ditampung oleh varibel tersebut.
BAB 2
ARRAY
Konsep Dasar Array
Array merupakan tipe terstruktur yang terdiri dari sejumlah komponen-komponen
yang mempunyai tipe yang sama. Suatu array mempunyai jumlah komponen yang
banyaknya tetap. Banyaknya komponen dalam suatu array ditunjukkan oleh suatu indek
untuk membedakan variabel yang satu dengan variabel lainnya. Setiap data yang terdapat
dalam array tersebut menempati alamat memori yang berbeda disebut elemen array.
Untuk mengakses nilai dari suatu elemen array, akan digunakan indeks dari array tersebut.
Sangat perlu diperhatikan bahwa dalam bahasa C/C++, indeks array selalu dimulai dari
angka 0, bukan 1. Hal ini berbeda dengan bahasa pemrograman lainnya (misalnya bahasa
Pascal) dimana indeks awal array dapat ditentukan sendiri sesuai dengan keinginan kita.
Untuk mendeklarasikan suatu array dalam bahasa C adalah dengan menggunakan tanda [ ]
(bracket).
Inisialisasi array :
Menginisialisasi array sama dengan memberikan nilai awal array pada saat
didefinisikan.
int nilai[6] = {8,7,5,6,4,3};
bisa disederhanakan sehingga menjadi :
int nilai[] = {8,7,5,6,4,3};
Keterangan :
Contoh diatas berarti berarti anda memesan tempat di
memori komputer sebanyak 6
tempat dengan indeks dari 0-5, dimana indeks ke-0
bernilai 8, ke-1 bernilai 7, dst, dan
semua elemennya bertipe data integer.
Catatan: Untuk memberikan niai 0 terhadap seluruh
elemen array pada saat
didefinisikan, Anda dapat memberikan nilai awal 0
pada elemen
pertama.
Sebagai contoh:
Int temp[100] = {0};
Akan memberikan hasil pemberian nilai nol dari
subscript bernilai 0 hingga 99.
Suatu array dapat digambarkan sebagai kotak panjang yang berisi kotak-kotak kecil
didalam kotak panjang tersebut.
Elemen
Elemen
Elemen
Elemen
Elemen
Elemen
Array Nil_Akhir
BAB 3
STRUCTURE
Struktur merupakan kumpulan elemen data yang digabungkan menjadi
satu kesatuan data. Masing-masing elemen data tersebut dinamakan field atau
elemen struktur. Field tersebut bisa memiliki tipe data yang ataupun berbeda,
meskipun field tersebut dalam satu kesatuan tetapi tetap bisa siakses secara
individu.
Struktur dan array mempunyai kesamaan dan perbedaan, kesamaannya yaitu
alokasi memori untuk elemen-elemennya sudah ditentukan sebelum program
dijalankan. Perbedaannya, array adalah struktur data yang tipe data dari
elemen-elemennya harus sama dan elemen tersebut diakses melalui indeks
sedangkan struktur adalah struktur data yang tipe data dari elemenelemennya
tidak harus sama dan elemen tersebut diakses melalui identifier atau nama variabel.
Deklarasi struktur
struct nama_struktur // nama struktur, kata struct harus
ada
{
type1 element1;
type2 element2;
anggota / elemen dari struktur
type3 element3;
..
} nama_object; // identifier yang digunakan untuk
pemanggilan struktur
------------atau--------------struct nama_struktur
{
type1 element1;
type2 element2;
type3 element3;
..
} ;
struct nama_struktur nama_object;
Enumerasi
Enumerasi adalah tipe data yang mempunyai elemen-elemen bertipe
konstnta dengan urutan yang sudah dtentukan. Nilai-nilai dari konstanta ini berupa
nilai-nilai integer yang diwakili oleh pengenal yang ditulis di antara tanda kurung
kurawal { dan }. Tipe ini dideklarasikan dengan kata kunci enum.
Deklarasi Enumerasi :
Enum nama_enumerasi{nilai1,nilai2,}
Nested structure (Struktur Bersarang)
Suatu struktur yang dapat digunakan di dalam struktur yang lainnya.
Structure of Array
Apabila hendak menggunakan 1 struct untuk beberapa kali, ada 2 cara :
Deklarasi manual
#include <stdio.h>
typedef struct Mahasiswa {
char NIM[8];
char nama[50];
float ipk; };
void main()
{ Mahasiswa a,b,c;
BAB 4
POINTER (VAR. PENUNJUK)
Pointer adalah suatu variabel penunjuk yang menunjuk pada suatu alamat
memori komputer tertentu. Pointer merupakan variabel level rendah yang dapat
digunakan untuk menunjuk nilai integer, character, float, double, atau single, dan
bahkan tipe-tipe data lain yang didukung oleh bahasa C. Variabel biasa, sifatnya
statis dan sudah pasti, sedangkan pada pointer sifatnya dinamis dan dapat lebih
fleksibel. Variabel pointer yang tidak menunjuk pada nilai apapun berarti
memiliki nilai NULL, dan disebut sebagai dangling pointer karena nilainya tidak
diinisialisasi dan tidak dapat diprediksi.
Operator Pointer
Terdapat dua macam operator pointer, yaitu :
1.Operator Alamat / Deference ( & ).
2.Operator Reference ( * ).
1. Operator Alamat / Dereference Operator(&)
Setiap variabel yang dideklarasikan, disimpan dalam sebuah lokasi memori dan
pengguna biasanya tidak mengetahui di alamat mana data tersebut disimpan. Dalam
C++, untuk mengetahui alamat tempat penyimpanan data, dapat digunakan tanda
ampersand(&) yang dapat diartikan alamat.
Contoh :
Bil1 = &Bil2;
dibaca: isi variabel bil1 sama dengan alamat bil2
2. Operator Reference (*)
Penggunaan operator ini, berarti mengakses nilai sebuah alamat yang ditunjuk oleh
variabel pointer.
Contoh :
Bil1=*Bil2;
dibaca: bil1 sama dengan nilai yang ditunjuk oleh bil2.
Deklarasi variabel pointer
tipe * nama_pointer;
Beberapa hal tentang pointer :
Operasi variabel pointer dapat dikerjakan oleh variabel pointer yang lain, contoh :
X = 10;
Ptr1 = &X;
Ptr2 = Ptr1;
Ptr1 dan Ptr2 menghasilkan alamat variabel X yang sama.
OPERASI POINTER
1. Operasi penugasan
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.
contoh: y = 35;
x1 = &y;
x2 = x1;
2. Operasi aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer
saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan.
Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index
selanjutnya) dalam memori. Begitu juga operasi pengurangan.
3. Operasi Logika
Operasi logika juga dapat dilakukan pada sebuah variabel pointer
BAB 5
FUNCTION (FUNGSI)
Functin/fungsi adalah bagian dari suatu program yang memiliki nama tertentu yang
unik, digunakan untuk suatu pekerjaan tertentu, serta letaknya dipisahkan dari bagian
program yang menggunkan/memanggil fungsi tersebut.
Tipe data sederhana : integer, real, boolean dan string
Dalam matematika : f(x,y) = 3x y +xy ,f adalah sebuah fungsi dengan parameter x dan y.
Nilai yang diberikan fungsi tergantung nilai parameter masukannya. Fungsi diakses dengan
memanggil namanya (sama seperti prosedur). Fungsi dapat mengandung parameter formal
berjenis parameter masukan .Fungsi harus dideklarasikan dengan tipenya atau jenis
hasilnya.
Fungsi dibagi 2:
a. Fungsi tanpa parameter
b. Fungsi dengan parameter
Dalam pemrograman dikenal tiga jenis parameter yaitu :
1. Parameter masukan, adalah parameter yang digunakan untuk menampung nilai yang
akan dijadikan masukan (input) ke dalam suatu fungsi, artinya, sebuah fungsi dapat
menghasilkan nilai yang berbeda tergantung dari nilai dalam perameter yang
dimasukan pada saat pemanggilan fungsi tersebut.
2. Parameter keluaran, adalah parameter yang digunakan untuk menampung nilai yang
akan dijadikan keluaran (output) yang akan dikirimkan ke bagian yang memanggil
fungsi tersebut, umumnya parameter ini digunakan untuk fungsi yang tidak memiliki
nilai balik (prosedur)
3. Parameter masukan/keluaran, adalah parameter yang digunakan untuk menampung
nilai yang akan dijadikan masukan (input) ke dalam suatu fungsi selain itu juga
menampung nilai yang akan dijadikan keluaran (output) yang akan dikirimkan ke
bagian yang memanggil fungsi tersebut, artinya, sebuah parameter sebelum fungsi
dijalankan bertindak sebagai parameter masukan dan setelah fungsi dijalankan
parameter tersebut bertindak sebagai parameter keluaran.
BAB 6
SORTING (PENGURUTAN)
Sorting adalah proses mengatur sekumpulan objek menurut aturan atau
susunan tertentu. Urutan objek tersebut dapat menaik (ascending = dari data kecil
ke data lebih besar) atau menurun (descending = dari data besar ke data lebih
kecil).
Banyak sekali algoritma pengurutan yang ada, tetapi disini akan kita pelajari 3
metode yaitu:
Bubble sort (gelembung)
Selection sort (maksimum/minimun)
Insertion sort (sisip)
1. PENGURUTAN GELEMBUNG
Metode pengurutan gelembung (bubble sort) diinspirasi oleh gelembung sabun yang
ada di permukaan air. Karena berat jenis gelembung sabun lebih ringan daripada
berat jenis air maka gelembung sabun akan selalu mengapung. Prinsip pengapungan
ini juga dipakai pada pengurutan gelembung. Elemen yang berharga paling kecil
diapungkan, artinya diangkat ke atas (atau ke ujung paling kiri) melalui pertukaran.
Proses pengapungan ini dilakukan N kali langkah. Pada langkah ke-I, Larik[1..N] akan
terdiri dari 2 bagian yaitu:
A. Bagian yang sudah terurut yaitu L[1]..L[i].
B. Bagian yang belum terurut L[I+1]..L[n].
ALGORITMA PENGURUTAN GELEMBUNG
Untuk mendapatkan larik yan terurut menaik, proses yang harus dilakukan pada
BAB 7
SEARCHING (PENCARIAN)
Ada beberapa pencarian yang akan kita uraikan disini:
1. Pencarian Beruntun (Sekuensial Search)
2. Pencarian Beruntun dengan sentinel
3. Pencarian Bagi dua (Binary Search)
Pencarian Beruntun (Sekuensial Search)
Konsep : Membandingkan setiap setiap elemen larik satu per satu secara urut (beruntun),
mulai dari elemen pertama sampai dengan elemen yang terakhir. Ada 2 macam
pencarian beruntun,yaitu pencarian pada array yang sudah terurut, dan pencarian
pada array yang belum terurut.
Pencarian Beruntun Dengan Sentinel
Algoritma ini adalah pengembangan dari algoritma pencarian beruntun. Yang
dimaksud dengan sentinel adalah elemen fiktif yang sengaja ditambahkan sesudah
elemen terakhir dari larik tersebut. Jadi jika elemen terakhir dari larik adalah
L[N], maka sentinel diletakkan pada elemen L[N+1]. Akibatnya proses pencarian
akan selalu menemukan data yang dicari, akan tetapi harus selalu diperiksa letak
data yang ditemukan, apakah:
1. Di antara elemen-elemen larik yang sesungguhnya(antara L[1] sampai dengan L[N])
2. Pada elemen fiktif [L[N+1]]
Pencarian Bagi Dua (Binary Search)
Syarat : Data harus terurut
Salah satu keuntungan data yang terurut adalah memudahkan pencarian, yang
dalam hal ini adalah pencarian bagi dua. Sebenarnya dalam kehidupan sehari-hari
kita sering menerapkan algoritma ini. Untuk mencari kata tertentu dalam kamus
(misalnya kamus bahasa Inggris), kita tidak membuka kamus tersebut dari
halaman awal sampai halaman akhir satu persatu, namun kita mencarinya dengan
cara membelah atau membagi halaman-halaman buku tersebut. Begitu seterusnya
sampai kita menemukan kata yang dicari.
Prinsip Pencarian :
Kita asumsikan data sudah terurut, misalkan terurut menurun. Kita menyebut
indeks terkecil sebagai indeks ujung paling kiri, dan indeks terbesar sebagai
indeks ujung paling kanan.
Misalkan indeks kiri Ia dan indeks kanan adalah Ib. Pada mulanya Ia adalah 0 dan
Ib adalah N.
Langkah 1: Bagi 2 elemen larik pada elemen tengah. Elemen tengah adalah elemen dengan
indeks k=(Ia+Ib) div 2. (Elemen tengah, L[k], membagi larik menjadi 2 bagian
L[Iak-1] dan bagian kanan L[k+1Ib]).
Langkah 2: Periksa apakah L[k]=X. Jika L[k]=X, pencarian dihentikan sebab X sudah
ditemukan, tetapi jika tidak , harus ditentukan apakah pencarian pada larik
bagian kiri atau larik bagian kanan. Jika L[k] < X maka pencarian dilakukan pada
larik kiri. Sebaliknya jika L[k] >X maka pencarian dilakukan pada larik bagian
kanan.
Langkah 3: Ulangi langkah 1 sampai X atau Ia>Ib.
BAB 8
LINKED LIST
LINKED LIST
Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang
tersusun secara sekuensial, saling sambung-menyambung, dinamis dan terbatas. Linked
List sering disebut juga Senarai Berantai . Linked List saling terhubung dengan bantuan
variabel pointer . Masing-masing data dalam Linked List disebut dengan node (simpul) yang
menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari
beberapa field.
Bentuk Single Linked List
Pengertian:
Single artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir
node, pointernya menunjuk NULL. .Linked List artinya node-node tersebut saling terhubung
satu sama lain.
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan
juga memiliki field yang berisi data.
Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada
saat pembacaan isi linked list.
Pembuatan Single List
Deklarasi Node
typedef struct TNode{ int data; TNode *next; };
Penjelasan:
1. Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer
dan field next yang bertipe pointer dari TNode
2. Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode yang
berguna sebagai kepala linked list.
3. Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta
alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk
ke NULL.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
Single List Menggunakan Head
1. Dibutuhkan satu buah variabel pointer: head
2. Head akan selalu menunjuk pada node pertama
BAB 9
STACK
STACK
Stack atau tumpukan adalah suatu struktur yang penting dalam pemrograman. Bersifat LIFO ( Last In
First Out ). Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang
dikeluarkan dari stack. Ujung list disebut top.
BAB 10
QUEUE
QUEUE
Queue atau antrian adalah barisan elemen yang apabila ditambah maka penambahannya
berada di posisi belakang dan jika dilakukan pengambilan elemen dilakukan di elemen paling depan
(front). Bersifat FIFO ( First In First Out ). Benda yang pertama masuk ke dalam queue akan menjadi
benda pertama yang dikeluarkan dari queue.
Dalam queue sendiri terdapat beberapa operasi , yaitu:
1. IsEmpty : Mengecek apakah queue kosong atau tidak
2. IsFull : Mengecek apakah queue sudah penuh atau belum
3. Enqueue : Menambahkan data di queue
4. Dequeue : Mengambil data dari queue
5. Clear : Menghapus data dalam antrian
6. View : melihat data dalam antrian
Berbeda dengan stack, queue mempunyai 2 kata kunci, yaitu tail dan head. Fungsi nya buat
apa? Head adalah penanda urutan paling depan, sedangkan tail adalah penanda urutan
paling belakang. Karena jumlah operasinya banyak, kita kerjakan secara modular aja ya biar
lebih mudah.
1. Deklarasi Awal Queue
Variabel yang akan digunakan adalah data (array sebagai tempat queue), head, tail.
Sama seperti Stack, Nilai dari head dan tail dimulai dari -1 yang menandakan queue kosong.
2. IsEmpty
Sama seperti di Stack, IsEmpty berguna untuk mengecek apakah queue kosong atau
tidak. Indikator bahwa queue kosong adalah nilai dari head dan tail bernilai -1.
3. IsFull
Operasi IsFull digunakan untuk mengecek apakah queue sudah penuh atau belum.
Indikator kalau queue penuh adalah nilai tail = max 1. Mengapa? karena nilai maksimal
pada array yang mempunyai index 7 pada saat diakses akan mempunyai nilai maksimal 6.
4. Enqueue
Enqueue digunakan untuk memasukkan data kedalam queue. Sama seperti push
dalam stack. Sebelum memasukkan data kedalam antrian, kita harus mengecek terlebih
dahulu apakah queue / antrian sudah penuh atau belum. Kalau belum maka kita harus
mengecek apakah head sudah berada pada nilai 0 atau belum. Ini sangat penting karena
nilai head tidak akan lebih dari 0. PERLU DIPERHATIKAN ! Yang akan bergerak terus adalah
tail, sedangkan head hanya penunjuk urutan paling depan, sehingga nilainya tidak pernah
lebih dari 0. Kecuali antrian kosong, maka posisi head dan tail akan kembali menjadi -1.
5. Dequeue
Kebalikan dari fungsi enqueue, dequeue digunakan untuk mengambil data yang
sudah masuk di urutan pertama. Sehingga kita tinggal membaca data yang ada di posisi
head. Nah inilah fungsi dari head. Jangan lupa kita cek dulu apakah queue kosong atau tidak.
Tapi jika ada isinya, setelah data diambil, data dibelakangnya digeser ke depan.
6. Clear
Operasi clear digunakan untuk menghapus data yang ada di dalam queue. Caranya
cukup merubah nilai pada head dan tail menjadi -1. Tidak perlu diperhatikan data yang ada
di dalam array. Nantinya data data tersebut juga akan ditimpa.
7. View
Operasi ini digunakan untuk melihat data yang ada didalam queue. Caranya adalah
dengan membaca data pada index yang terdapat diantara head sampai tail.