Anda di halaman 1dari 41

POINTER

A. Tujuan
Setelah mempelajari bab ini diharapkan mahasiswa akan mampu :
1. Mengenaldanmemahami penggunaan pointer dalam listing program.
2. Membuat program sederhana dengan menerapkan konseppointer .

B. Dasar Teori.
Definisi Pointer
Pointer berisi alamat dari suatu data, BUKAN data seperti pada variabel.
Variabel disimpan dalam memori, dan akan ditempatkan pada alamat tertentu.
Pointer dalam program digunakan untuk me-nunjuk kesuatu alamat memori.
Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer dimaksudkan
untuk menunjukan kesuatu alamat memori sehingga alamat dari suatu variable dapat diketahui
dengan mudah.
Keunggulan menggunakan Pointer:
1. Penanganan terhadap array dan string akan lebih singkat, dan efisien.
2. Memungkinkan suatu fungsi untuk menghasilkan lebih dari satu nilai.
3. Memiliki kemampuan untuk mengirimkan alamat suatu fungsi ke fungsi yang lain.
4. Kemampuan berkerja dengan memori yang telah dialokasikan secara dinamik.
5. Memungkinkan untuk berhubungan langsung ke hardware.
6. Untuk menciptakan data structure yang kompleks.
7. Memungkinkan untuk berhubungan langsung dengan parameter command line.
Dengan menggunakan pointer yang benar, anda dapat menyusun sebuah program
yang berkemampuan tinggi. Sebaliknya sedikit saja kesalahan dalam menggunakan pointer akan
mengakibatkan kesalahan fatal pada program anda. Karena pointer dapat langsung
menunjukan pada lokasi memori, jika lokasi yang ditunjuk salah, berarti data yang diambil
juga akan salah, dan sudah tentu program anda akan menjadi salah juga.
Operator deference (&) ampersand sign
Operator ini biasa disebut dengan address of atau operator alamat. Dengan
menggunakan operator deference variable akan menghasilkan alamat lokasi memori.

Operator reference (*)


Operator ini biasa disebut value pointed by. Dengan menggunakan operator ini akan
dihasilkan nilai yang berada pada suatu alamat memori.

Deklarasi Variabel Pointer


Tipe variable sama dengan tipe yang dikenal oleh variable biasa, misalnya int, float, char
dan sebagainya. Nama variabel pointer juga mengikuti ketentuan nama variable biasa. Yang
membedakan variabel pointer dengan variable biasa dengan menggunakan tanda asterisk (*)
didepan nama varibel pada waktu deklarasi.
Contoh :
Int *ptr_x;
Ptr merupakan variabel pointer, karena pada deklarasi digunakan tanda (*) didepan
nama variabelnya. Pengertian dalam deklarasi variabel pointer memiliki perbedaan dengan
variable biasa, jika dalam deklarasi variable biasa:
Float x;
Dalamdeklarasi pointer:
Float *ptr_x;
Artinya variabel pointer ptr_x akan menunjukkan pada variable yang bertipe float. Jadi
disini bukan ptr_x-nya yang bertipe float, melainkan variabel lain yang ditunjuk yang bertipe
float. Contoh: dalam pendeklarasian yang salah :
float y;
Int *ptr_y;
Benar :
Float y;
Float *ptr_y;
Dan untuk mendeklarasikan sebuah variable y yang bertipe integer dengan variabel
pointernya adalah:
Int y;
Int *yy; dapat disederhanakan
Int y,*yy;

Input data Melalui Pointer


Anda dapat juga mengimputkan suatu data ke dalam variable dengan dengan menggunakan
pointernya, sebagai contoh tinjaulah program dibawah ini:
Int x;
Int *ptr_x;
Ptr_x=&x;
Printf(”inputkannilai x : ”);
Scanf(”%d”,ptr_x);
Ingat! Menginputkan data dengan scanf() membutuhkan alamat dari variabel yang
bersangkutan. Karena ptr_x merupakan alamat dari variabel x, maka ptr_x dapat digunakan
dalam scanf(). Jadi pernyataan:
Scanf (”%d”,ptr_x);
Sama dengan:
Scanf (”%d”,&x);
Dimana &x juga menunjukkan alamat dari variabel x.

Memberikan suatu nilai pada suatu variable lewat pointer


Nilai suatu variabel dapat juga diberikan lewat pointernya, nilai yang diberikan ini dapat
berbentuk kostanta ataupun ekspresi aritmatika.
Pointer danfungsi
Pengiriman data dari sebuah fungsi ke fungsi lain dapat juga dilakukan dengan bantuan
pointer, bila pointer digunakan, maka data yang dikirim harus berupa alamat variabel, bukan
lagi nama variabel.
#include <stdio.h>

char*nama_bulan(int n);
main()
{
int bl;

printf("Bulan(1..2*)");
scanf("%d",&bl);
printf("%s\n",nama_bulan(bl));
}

char*nama_bulan(int n)
{
static char*bulan[]={
"Kode Bulan Salah",

"Januari","Februari","Maret","Appril","Mei","Juni","Juli","Agustu
s",
"September","Oktober","Nopember","Desember"};

return((n<1||n>12)?bulan[0]:bulan[n]);
}
Output Program:

Algoritma:

1. Mulai.
2. Masukkan bilangan bulan (1...2).
3. Cetak hasil.
scanf("%d",&bl);
printf("%s\n",nama_bulan(bl));
4. Jika inputan bilangan selain 1-12, maka “Kode Bulan Salah”.
5. Cetak hasil.
return((n<1||n>12)?bulan[0]:bulan[n]);
6. Selesai.
Deskripsi:

Program diatas menggunakan file header stdio karena menggunakan printf dan scanf.
Menggunakan fungsi main. Menggunakan tipe data string, static char, char dan int.
Menggunakan operator ||, <. Menggunakan fungsi return((n<1||n>12)?bulan[0]:bulan[n]); , yang
artinya jika n bernilai 1-12 maka bernilai benar hasilnya “"Januari"
/"Februari"/"Maret"/"Appril"/"Mei"/"Juni"
/"Juli"/"Agustus"/"September"/"Oktober"/"Nopember"/"Desember"}; , jika lebih dari 12 atau
kurang dari 1 maka bernilai salah dan hasilnya “Kode bulan salah”.
KESIMPULAN
1. Pointer adalah sebuah variabel yang berisi alamat lain. Suatu pointer dimaksudkan
untuk menunjukan kesuatu alamat memori sehingga alamat dari suatu variable dapat
diketahui dengan mudah.
2. Dengan menggunakan pointer yang benar, dapat menyusun sebuah program yang
berkemampuan tinggi. Sebaliknya sedikit saja kesalahan dalam menggunakan pointer
akan mengakibatkan kesalahan fatal pada program tersebut.
3. Menggunakan operator deference variable akan menghasilkan alamat lokasi memori.
4. Menggunakan operator reference akan dihasilkan nilai yang berada pada suatu alamat
memori.
STRUCT

A. Tujuan
Setelahmempelajaribabinidiharapkanmahasiswaakanmampu :
1. Mengenal dan memahami penggunaan struct (struktur) dalam listing program.
2. Membuat program sederhana dengan menerapkan konsep struct (struktur).

B. DasarTeori

Definisi Struktur.
Struktur yaitu pengelompokan dari variabel-variabel atau sejumlah data dengan tipe yang
berlainan yang bernaung dalam satu nama yang sama. Struktur biasa digunakan untuk
mengelompokkan beberapa informasi yang berkaitan dengan sebuah kesatuan, atau biasanya
disebut dengan record.
Deklarasi Struktur.
Cara mendeklarasikan struktur adalah dengan menggunakan kata kunci struct. Perhatikan
contoh penulisan struktur berikut ini:

Pada Contoh di atas, struktur bernama data_tanggal, yang tersusun atas 3 unit
penyusunnya yaitu tahun, tanggal, dan bulan. Setelah dibuat struktur tanggal, selanjutnya
struktur tersebut dapat digunakan sebagai tipe data suatu variabel, dalam hal ini disebut tipe data
abstrak. Berikut contoh programnya.
Misalkan terdapat 2 buah variabel tgl1 dan tgl2 sama-sama bertipe data_tanggal.
Selanjutnya diinginkan mengcopy isi dari tgl1 ke tgl2, maka dapat dilakukan dengan perintah
assignment biasa.
Perhatikan Contoh 2 :

Dengan menggunakan “typedef”, struktur psd didefinisikan kembali dengan nama baru tanpa
menggunakan kata “struct” di awal nama baru tersebut.
Struktur dalam Struktur.
Suatu struktur juga bisa mengandung struktur yang lain. Sebagai gambaran, ditunjukkan
pada contoh di bawah ini :

Pada contoh ini, terdapat pendeklarasian struktur bernama data_pegawai dan sekaligus
pendefinisian variable struktur bernama rec_peg. Gambar di bawah ini menunjukkan anggota
dari variable rec_peg.

Mengakses Anggota Struktur.


Anggota struktur dapat diakses menggunakan bentuk :
Struktur dalam Fungsi.
Suatu struktur juga dapat digunakan untuk argumen/parameter suatu fungsi (function).

Struktur dalam Pointer.


Script program :
#include <stdio.h>
main ()
{
struct
{
floatjari;
floatkeliling;
floatluas;
}
lingkaran;
printf("MasukkanJari-JariLingkaran:");
scanf("%f",&lingkaran.jari);
lingkaran.keliling=2*3.14259*lingkaran.jari;
lingkaran.luas=3.14259*lingkaran.jari*lingkaran.jari;
printf("KelilingLingkaran=%f\n",lingkaran.keliling);
printf("LuasLingkaran=%f\n",lingkaran.luas);
}
Output Program:

Algoritma:

1. Mulai.
2. Membaca file header stdio
3. Membaca fungsi main.
4. Membaca struct
5. Membaca tipedata float.
6. Membaca fungsi lingkaran.
7. Masukan jari-jari lingkaran.
scanf("%f",&lingkaran.jari);
8. Hitung keliling lingkaran.
lingkaran.keliling=2*3.14259*lingkaran.jari;
9. Hitung luas lingkaran.
lingkaran.luas=3.14259*lingkaran.jari*lingkaran.jari;
10. Cetak hasil.
printf("Keliling Lingkaran=%f\n",lingkaran.keliling);
printf("Luas Lingkaran=%f\n",lingkaran.luas);
11. Selesai.

Deskripsi:

Untuk membuat program diatas maka menggunakan file header stdio karena menggunakan
printf dan scanf. Menggunakan fungsi main. Kemudian menggunakan struct. Menggunakan tipe
data float , karena nantinya hasilnya dalam bentuk desimal. Kemudian menggunakan rumus “

lingkaran.keliling=2*3.14259*lingkaran.jari;

lingkaran.luas=3.14259*lingkaran.jari*lingkaran.jari;
KESIMPULAN
1. Struct adalah tipe data bentukan yang berisi kumpulan variabel-variabel
yang bernaung dalam satu nama yang sama dan memiliki kaitan satu
sama lain.
2. Berbeda dengan array hanya berupa kumpulan variabel yang bertipe data
sama, struct bisa memiliki variabel-variabel yang bertipe data sama atau
berbeda, bahkan bisa menyimpan variabel yang bertipe data array atau
struct itu sendiri.
3. Variabel-variabel yang menjadi anggota struct disebut dengan elemen
struct.
4. Penggunaan/pemakaian tipe data struct dilakukan dengan membuat suatu variabel yang
bertipe data struct tersebut
5. Pengaksesan elemen struct dilakukan secara individual dengan menyebutkan nama
variabel struct diikuti dengan operator titik (.)
ANTRIAN / QUEUE

A. RUMUSAN MASALAH

 Apakah struktur data Antrian(queue) ?


 Bagaimana cara pengoperasian struktur data Antrian(queue) ?
 Apa saja contoh struktur data Antrian(queue) dalam kehidupan sehari-hari?
 Apa saja implementasi dari struktur data Antrian(queue) ?
 Bagaimana bentuk contoh program Antrian(queue)?

B. TUJUAN

 Memahami pengertian struktur data Antrian(queue)


 Memahami cara pengoperasian struktur data Antrian(queue)
 Mengetahui contoh struktur data Antrian(queue) dalam kehidupan sehari-hari
 Mengimplementasikan struktur data Antrian(queue) dengan array dan linked list
 Mengetahui bentuk contoh program Antrian(queue)
 Untuk memenuhi tugas dari dosen pada kuliah Struktur Data

C. MANFAAT

 Dapat memahami pengertian struktur data Antrian(queue)


 Dapat memahami cara pengoperasian struktur data Antrian(queue)
 Dapat mengetahui contoh struktur data Antrian(queue) dalam kehidupan sehari-hari
 Dapat mengimplementasikan struktur data Antrian(queue) dengan array dan linked list
 Dapat mengetahui bentuk contoh program Antrian(queue)
Pengertian struktur data Antrian(queue)
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.
Antrian disebut juga “Waiting Line” yaitu penambahan data baru dilakukan pada bagian
belakang dan penghapusan data dilakukan pada bagian depan.
Queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang
cukup sering kita temui dalam kehidupan sehari-hari,
Queue (Antrian) adalah list linier yang :
1. Dikenali data pertama (Head) dan data terakhirnya (Tail)
2. Aturan penyisipan dan penghapusan datanya disefinisikan sebagai berikut :
- Penyisipan selalu dilakukan setelah data terakhir
- Penghapusan selalu dilakukan pada data pertama
3. Satu data dengan data lain dapat diakses melalui informasi

(1) Queue dengan 2 data;


(2) Queue setelah proses enqueue C, D dan E;
(3) Setelah proses dequeue A dan B

Operasi-operasi pada Antrian(queue)


1. Create()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
2. IsEmpty()
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (data pertama
dalam antrian) yang tidak akan berubah-ubah. Pergerakan pada Antrian terjadi dengan
penambahan data Antrian kebelakang, yaitu menggunakan nilai tail
3. IsFull()
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai tail, jika tail >= MAX-1 (karena MAX-1 adalah batas data
array pada C) berarti sudah penuh
4. Enqueue
Untuk menambahkan data ke dalam Antrian, penambahan data selalu ditambahkan di data
paling belakang. Penambahan data selalu menggerakan variabel tail dengan cara increment
counter tail
5. Dequeue()
Digunakan untuk menghapus data terdepan/pertama dari Antrian
Dengan cara mengurangi counter Tail dan menggeser semua data antrian kedepan.
Penggeseran dilakukan dengan menggunakan looping
6. Clear()
Untuk menghapus data-data Antrian dengan cara membuat tail dan head = -1.
Penghapusan data-data Antrian sebenarnya tidak menghapus arraynya, namun hanya
mengeset indeks pengaksesan-nya ke nilai -1 sehingga data-data Antrian tidak lagi terbaca
7. Tampil()
Untuk menampilkan nilai-nilai data Antrian menggunakan looping dari head s/d tail
Implementasi Antrian(queue)
Implementasi Antrian dengan Array
Seperti halnya pada tumpukan, maka dalam antrian kita juga mengenal ada dua operasi
dasar, yaitu menambah data baru yang akan kita tempatkan di bagian belakang antrian dan
menghapus data yang terletak di bagian depan antrian. Disamping itu seringkali kita juga perlu
melihat apakah antrian mempunyai isi atau dalam keadaan kosong. Operasi penambahan data
baru selalu bisa kita lakukan karena tidak ada pembatasan banyaknya data dari suatu antrian.
Tetapi untuk menghapus data, maka kita harus melihat apakah antrian dalam keadaan kosong
atau tidak. Tentu saja kita tidak mungkin menghapus data dari suatu antrian 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 dari antrian. Berada pada posisi 0:N-
1dimana pada posisi ini dapat diindikasikan dua pengenal, yaitu Front dan Rear. Count
menunjukkan jumlah item dalam antrian. Rear menunjukkan posisi dimana setelahnya dapat
dimasukkan item berikutnya. Representasi antrian lengkap dengan operasi-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 memasukkan 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 {
*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, maka kita
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) untuk menjaga besarnya nilai X pada range 0:N-1. 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 telah berada pada N, maka indeks diset juga
pada angka 0. Perintah di bawah ini merupakan perintah yang menunjukkan proses Arithmetic
Modular yang diterapkan pada antrian.
Front = (Front + 1) % N;
Rear = (Rear +1) % N;

Implementasi Antrian dengan Linked list


Antrian yang direpresentasikan dengan linked list mempunyai beberapa variasi. Pada
kesempatan kali ini hanya direpresentasikan satu macam saja. Linked list yang digunakan di sini
menggunakan struktur yang berisi pointer yang menunjuk pada simpul Front dan Rear dari
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 {
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;
}
}
Contoh program Antrian(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]);
}
}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();
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);
}
Kesimpulan
 Simpul adalah semacam tipe data yang kita buat sendiri sebagaimanan nama tipe yang telah
disediakan oleh bahasa pemrograman.
 Info adalah tempat penyimpanan data dengan tipe yang berbeda-beda sesuai keinginan.
 Link adalah tempat penyimpanan alamat simpulnya (pointer).
 Linked list adalah sebuah struktur untuk menyimpan data yang bersifat dinamik
 Beberapa operasi dapat diterapkan pada linked list seperti sisip(insert), hapus(delete)
 Operasi-operasi yang ada pada linked list relatif lebih sulit jika dibandingkan dengan operasi-
operasi pada struktur yang statis
 Null adalah suatu kondisi khusus dimana pointer itu belum di set dengan sebuah address
tertentu, artinya pointer tidak menunjuk ke alamat manapun.
 Antrian (queue) adalah sebuah bentuk struktur yang berdasarkan pada proses FIFO (First In
First Out)
 Contoh Antrian (queue) bisa kita temukan di kehidupan sehari-hari seperti antrian masuk
jalan tol dan loket antrian.
 Pengoperasian Antrian (qeue) berbagai macam seperti, Create, Enque, Deque, IsEmpty,
IsFull, Tampil, Clear, dsb.
 Antrian dapat diimplementasikan dengan menggunakan array atau linked list
SEARCHING ( PENCARIAN )

A. Tujuan Umum
1. Mahasiswa mampu melakukan perancangan aplikasi menggunakan Struktur
Searching(Pencarian).
2. Mahasiswa mampu melakukan analisis pada algoritma Searching yang dibuat.
3. Mahasiswa mampu mengimplementasikan algoritma Searching pada sebuah aplikasi
secaratepat dan efisien
Tujuan Khusus
1. Mahasiswa mampu menjelaskan mengenai algoritma Searching.
2. Mahasiswa mampu membuat dan mendeklarasikan struktur algoritma Searching.
3. Mahasiswa mampu menerapkan dan mengimplementasikan algoritma Searching.

B. DASAR TEORI

a) Sequential Search (Linear Search)


Sequential Search adalah teknik pencarian data dimana data dicari secara urut dari
depan ke belakang atau dari awal sampai akhir. Kelebihan dari proses pencarian secara
sequential ini jika data yang dicari terletak didepan, maka data akan ditemukan dengan
cepat. Tetapi dibalik kelebihannya ini, teknik ini juga memiliki kekurangan. Pertama, jika
data yang dicari terletak dibelakang atau paling akhir, maka akan membutuhkan waktu yang
lama dalam proses pencariannya. Kedua, beban komputer akan semakin bertambah jika
jumlah data dalam array sangat banyak. Disini IT Programmer akan memberikan contoh
sintaks dari Sequential Search dalam C++. Tidak ada penginputan data oleh user dalam
program ini, karena data telah dideklarasikan terlebih dahulu. Kalian dapat mengubahnya
sendiri jika kalian telah lebih menguasai bagian ini.

Teknik pencarian data dari array yang paling mudah adalah dengan cara sequential search,
dimana data dalamarray dibaca 1 demi satu, diurutkan dari index terkecil ke index terbesar,
maupun sebaliknya.
Contoh :
Array :
int a[5] = {0,3,6,10,1} (index array pada bahasa C++ dimulai dari index ke 0 !!!) jika kita
ingin mencari bilangan 6 dalam array tersebut, maka proses yang terjadi kita mencari
a) dari array index ke-0, yaitu 0, dicocokan dengan bilangan yang akan dicari, jika tidak
sama, makamencari ke index berikutnya
b) pada array index ke-1, juga bukan bilangan yang dicari, maka kita mencari lagi pada
index berikutnya
c) pada array index ke-2, ternyata bilangan yang kita cari ada ditemukan, maka kita
keluar dari loopingpencarian.

b) Binary search
Metode pencarian yang kedua adalah binary search, pada metode pencarian ini, data
harus diurutkanterlebih dahulu. Pada metode pencarian ini, data dibagi menjadi dua
bagian (secara logika), untuk setiaptahap pencarian
Pencarian Biner (Binary Search) dilakukan untuk :

 Memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang
dicari dengan data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat
besar ukurannya.
 Prinsip dasarnya adalah melakukan proses pembagian ruang pencarian secara
berulang-ulang sampai data ditemukan atau sampai ruang pencarian tidak dapat
dibagi lagi (berarti ada kemungkinan data tidak ditemukan).

 Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut,
misalkan terurut menaik.

Algoritma binary search :


1. Data diambil dari posisi 1 sampai posisi akhir N
2. Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
3. Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama
atau lebih kecil, ataulebih besar?
4. Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi
tengah + 1
5. Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi
tengah – 1
6. Jika data sama, berarti ketemu.

Keunggulan Binary Search


Keunggulan utama dari algoritma binary search adalah kompleksitas algoritmanya yang
lebih kecil daripada kompleksitas algoritma sequential search. Hal ini menyebabkan waktu
yang dibutuhkan algoritma binary search dalam mencari sebuah record dalam sebuah tabel
lebih kecil daripada waktu yang dibutuhkan algoritma sequential search.
Contoh source binary search :

Output :

c) Interpolation Search
Interpolation search merupakan salah satu metode pencarian yang dapat
digunakan. Seperti pada binarysearch, data yang harus diurutkan terlebih dahulu,
sebelum dapat dilakukan pencarian dengan metodeini. Pada metode pencarian ini, kita
mencoba menebak letak data yang kita cari, dengan perhitungan
 Jika data[posisi] > data yg dicari, high = pos – 1
 Jika data[posisi] < data yg dicari, low = pos + 1

Contoh source code interpolation search :

Output:
Tambahan materi :
break ;
digunakan untuk keluar dari suatu blok perintah
continue;
digunakan untuk mem by-pass satu iterasi pada perulangan
contoh kode : (dijalankan dan dipelajari cara kerjanya)
#include<stdio.h>
void main(){
for(int i=0;i<10;i++){
for(int j=10;j>0;j--){
if(i+j==10) break;
//if(i+j==10) continue; //hilangkan tanda slash di depan if, dan beri
slash 2 di depan if yang atas untuk mencoba kode continue
printf("%i ",i+j);
printf("pass");
}
printf("\n");
}
}
Contoh Program
:

#include <stdio.h>

#include <iostream>

#include <stdlib.h>

#include <string.h>

#include <math.h>

using namespace std;

int data[10],data2[10];

void Sequential_Search() //fungsi pencarian dengan sequential

int i,cari,flag=0;

printf("Masukan data yang ingin dicari : ");

scanf("%i",&cari);

for(i=0;i<10;i++)

if(data[i]==cari)

flag=1;

break;

if(flag==1)

printf("Data yang dicari ditemukan pada index ke-%i\n",i);

else

printf("Data yang dicari tidak ditemukan!\n");


printf("\n");

void Binary_Search() //fungsi pencarian dengan binary

int temp,awal,tengah,akhir,cari,a,i,flag=0;

awal=0;

akhir=9;

printf("Masukkan Data yang anda cari :");

scanf("%i",&cari);

while(awal<=akhir && flag==0)

tengah=(awal+akhir)/2;

if(data2[tengah]==cari)

flag=1;

break;

else if(data2[tengah]<cari)

awal=tengah+1;

printf("cari kiri\n");

else

akhir=tengah-1;

printf("cari kanan\n");

if(flag==1) printf("Data Anda ditemukan");

else printf("Data Anda tidak ditemukan");

}
void Interpolation_Search() //fungsi pencarian dengan interpolation

int data[10];

int low,high,pos,cari,flag=0;

float posisi;

low=0;

high=9;

printf("Masukkan Data yang anda cari :");

scanf("%i",&cari);

do

posisi=(float)((cari-data2[low])/(data2[high]-data2[low]))*(high-
low)+low;

pos=floor(posisi);

if (data2[pos]==cari)

flag=1; //data ditemukan

break;

if(data2[pos]>cari) high=pos-1;

else if(data2[pos]<cari) low=pos+1;

}while(cari>=data2[low] && cari<=data2[high]);

if(flag==1)printf("Data Anda ditemukan\n");

else printf("Data Anda tidak ditemukan!\n");

void Input_Data() //fungsi input data

printf("\nMasukkan data Sebanyak 10\n\n");

for(int i=0;i<10;i++) //data sebanyak 10

printf("Data ke-%d = ",(i+1));

scanf("%d",&data[i]);

data2[i] = data[i];

}
int main()

int pilih,i,a,temp;

cout<<" |+++++++++++++++++++++++++++++|"<<endl;

printf(" | Menu Searching |\n");

cout<<" |-----------------------------|"<<endl;

printf(" | 1. Sequential Search |\n");

printf(" | 2. Binary Search |\n");

printf(" | 3. Interpolation Search |\n");

cout<<" |+++++++++++++++++++++++++++++|"<<endl;

printf("\nMasukkan Pilihan Anda = ");

scanf("%d",&pilih);

Input_Data();

for (a=0;a<=4;a++)

data2[a]=data[a];

for (a=0;a<4;a++)

for (i=a+1;i<=4;i++)

if (data2[i]<data2[a])

temp = data2[i];

data2[i] = data2[a];

data2[a] = temp;

}
switch(pilih)

case 1:Sequential_Search();

break;

case 2:Binary_Search();

break;

case 3:Interpolation_Search();

break;

default:

break;

Output Program :
Algoritma :
1) Mulai.
2) Membaca file header.
3) Membaca tipe data int dalam sebuah array.
4) Membaca fungsi sequential search.
5) Membaca fungsi binary search.
6) Membaca fungsi interpolation search.
7) Membaca fungsi input data.
8) Membaca fungsi utama.
9) Inputan Pilihan 1, 2, 3.
10) Masukkan pilihan 1/2/3.
11) Membaca fungsi inputan data kemudian perulangan for
for (a=0;a<=4;a++)
{
data2[a]=data[a];
}
for (a=0;a<4;a++)
{
for (i=a+1;i<=4;i++)
{
if (data2[i]<data2[a])
{
temp = data2[i];
data2[i] = data2[a];
data2[a] = temp;
}
}
}
12) Membaca fungsi percabangan switch-case.
13) Membaca fungsi default dan break.
14) Cetak hasil.
15) Selesai.

Deskripsi:
Program diatas adalah aplikasi dari 3 pilihan metode searching yang dijadikan satu
dengan menggunakan percabangan switch-case. Program diatas menggunakan fungsi sequential
search, binary search dan interpolation search, dan itu semua merupakan metode metode dalam
pencarian.
KESIMPULAN.
1. Sequential Search adalah teknik pencarian data dimana data dicari secara urut dari depan ke
belakang atau dari awal sampai akhir.
2. Kelebihan dari proses pencarian secara sequential ini jika data yang dicari terletak didepan,
maka data akan ditemukan dengan cepat.
3. Binary search metode pencarian ini, data harus diurutkanterlebih dahulu.
6. Interpolation search. Seperti pada binary search, data yang harus diurutkan terlebih
dahulu, sebelum dapat dilakukan pencarian dengan metodeini.
7. Pada metode pencarian ini, kita mencoba menebak letak data yang kita cari, dengan
perhitungan
 Jika data[posisi] > data yg dicari, high = pos – 1
 Jika data[posisi] < data yg dicari, low = pos + 1

Anda mungkin juga menyukai