Pratikum
Struktur Data
Adapun materi yang akan saya bagikan diblog ini yaitu
:
1. Variable
2. Array
Dimensi 1 dan 2
3. Stack
4. Queue
5. Sorting
(Selection sort dan insertion sort)
6. Searching
(Sequential search dan Binarry search)
1.Variabel.
Variabel adalah nama yang mewakili suatu elemen
data. Aturan yang wajib diikuti dalam pemberian nama variabel, antara lain:
- Harus dimulai dengan abjad tidak boleh dengan angka atau symbol.
- Tidak boleh ada spasi diantaranya.
- Tidak boleh menggunakan symbol-symbol yang bisa membingungkan seperti titik koma, koma, titik dua dan lain sebagainya.
- Sebaiknya memililki arti yang sesuai dengan elemen data.
- Sebaiknya tidak perlu panjang.
Contoh variable yang benar Nama,
Alamat, Nilai_ujian
Contoh variable yang salah 4XYZ,
IPr ata, Var+xy,778.
Int nilai;
2.Array
Array adalah suatu struktur yang terdiri dari
sejumlah elemen yang memiliki tipe data
yang sama. Elemen-elemen array tersusun secara
sekuensial dalam memori komputer.
Array dapat berupa satu dimensi, dua dimensi, tiga
dimensi ataupun banyak dimensi
(multi dimensi).
·
Array
Satu Dimensi
Array
Satu dimensi tidak lain adalah kumpulan elemen-elemen identik yang tersusun
dalam satu baris. Elemen-elemen tersebut memiliki tipe data yang sama, tetapi
isi dari elemen tersebut boleh berbeda.
Elemen ke-
|
0
|
1
|
2
|
Nilai
|
25
|
26
|
34
|
Bentuk
Umum:
<Tipe data>Nama
Array[n]={elemen0, elemen1, elemen2};
Atau
<Tipe data>Nama Array[n];
N=Jumlah
Elemen
Contoh Program :
#include<iostream>
#include<conio.h>
main()
{
int nilai[4];
int i;
cout<<"Masukan nilai\t:\n";
for(i=0;i<4;i++)
{
cout<<"nilai
ke- "<<(i+1)<<"\t: ";
cin>>nilai[i];
}
cout<<"Nilai yang telah anda
masukan\t:\n";
for(i=0;i<4;i++)
{
cout<<"\nnilai
ke- "<<(i+1)<<"\t: "<<nilai[i];
}
getch();
}
Hasil outputnya :
·
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 kolom elemen, maka array dua dimensi terdiri dari beberapa baris dan
beberapa kolom elemen yang bertipe sama sehingga dapat digambarkan sebagai
berikut:
0
|
1
|
2
|
3
|
4
|
|
0
|
10
|
5
|
54
|
6
|
23
|
1
|
41
|
26
|
17
|
65
|
24
|
2
|
13
|
18
|
19
|
45
|
8
|
3
|
21
|
27
|
34
|
76
|
35
|
Bentuk
umum:
<tipe data> NamaArray [m][n];
Contoh Program :
int
main()
{
int i,j;
int data[2][3];
cout<<"Input
data\t:\n"<<endl;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
cout<<"Data
["<<i<<"]["<<j<<"]\t= ";
cin>>data[i][j];
}
}
cout<<"Cetak
Data\t:\n"<<endl;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
cout<<"Data
["<<i<<"]["<<j<<"]\t=
"<<data[i][j]<<endl;
}
}
getch();
}
Hasil outputnya :
Cotoh lain :
Int
data[3][5]={{4,5,6,9,9},{9,2,5,7,9},{8,3,7,3,9}};
Contoh program :
#include<iostream>
#include<conio.h>
int main()
{
int i,j;
int
data[3][5]={{4,5,6,9,9},{9,2,5,7,9},{8,3,7,3,9}};
clrscr();
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
cout<<data[i][j];
cout<<" ";
}
cout<<endl;
}
getch();
}
Hasil outputnya :
3.Struktur Stack
Stack
(Tumpukan) adalah struktur data yang meniru bagaimana proses menyimpan dan
mengambil suatu buku pada suatu tumpukan buku yang ada dilantai. Apabila
diperhatikan dengan seksama maka proses menyimpan buku disebut (push) dan
proses mengambil buku disebut (pop) dari suatu tumpukan selalu dilakukan pada
bagian atas tumpukan (top of the stack) sehingga terjadi urutan yang disebut
LIFO (Last in first Out). Artinya, buku yang terakhir disimpan adalah buku yang
pertama harus diambil karena buku inilah yang berada pada urutan teratas pada
tumpukan.
Stack digunakan apabila data akan diakses dengan
urutan LIFO struktur data stack dapat diimplementasi dengan menggukan larik
(array), dengan struktur data bentukan (record).
Contoh program :
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
//deklarasi stack
dengan struct dan array
struct STACK
{
int data[5];
int atas;
};
//deklarasi variabel
tumpuk dari struct
STACK tumpuk;
void main()
{
clrscr();
int pilihan, baru, i;
//inisialisasi awal
tumpuk.atas = -1;
do{
cout<<"1.
Push data"<<endl;
cout<<"2.
Pop Data"<<endl;
cout<<"3.
Print Data"<<endl;
cout<<endl;
cout<<"Pilihan
: ";
cin>>pilihan;
switch(pilihan)
{
case
1:
{
if(tumpuk.atas==5-1)
{
cout<<"Tumpukan
penuh";
getch();
}
else
{
cout<<"Data
yang akan di push : ";
cin>>baru;
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
}
break;
}
case 2:
{
if(tumpuk.atas==-1)
{
cout<<"Tumpukan
kosong";
getch();
}
else
{
cout<<"Data
yang akan di Pop = "
<<tumpuk.data[tumpuk.atas]<<endl;
tumpuk.atas--;
getch();
}
break;
}
case 3:
{
if(tumpuk.atas
== -1)
{
cout<<"Tumpukan
kosong "<<endl;
getch();
}
else
{
cout<<"Data
= "<<endl;
for(i=0;i<=tumpuk.atas;i++)
{
cout<<tumpuk.data[i]<<"
";
}
getch();
}
break;
}
default:
{
cout<<"Tidak
ada dalam pilihan"<<endl;
}
}
while(pilihan>=1 && pilihan <=3);
}
getch();
}
Tampilan outputnya:
4.Struktur
Antrian (Queue)
Struktur antrian adalah
struktur data yang meniru antrian orang yang sedang menunggu pelayanan misalnya
di depan seorang teller bank, atau antrian orang yang sedamg membeli karcis pertunjukan.
Apabila diperhatikan dengan seksama maka penambahan orang pada suatu antrian
selalu dilakukan pada urutan paling belakang (rear of queue), dan pelyanan
selalu dilakukan pada urutan depan (front of queue) sehingga urutan proses
antrian sering disebut FIFO (First in first out). Yang pertama masuk antrian,
itulah yang pertama dilayani.
Contoh :
#include
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
int main() {
int queue[10], i, head=-1, tail=-1,
enqueue, pil, urut=0,tmp;
do {
system("pause");
system("cls");
printf("1. Masukkan
Antrian\n");
printf("2. Keluarkan
Antrian\n");
printf("3. Lihat Antrian\n");
printf("4. Keluar\n\n");
printf("Silahkan masukkan pilihan
anda : ");
scanf("%d", &pil);
printf("\n");
if(pil==1) {if(tail==9)
{printf("Antrian Penuh\n\n");}
else if(tail==-1) {head++;tail++;
printf("Masukkan nilai :
");
scanf("%d", &enqueue);
queue[tail]=enqueue;
urut++;
printf("\nNomor urut :
%d\n", urut);
printf("Langsung
dilayani\n\n");}
else {tail++;
printf("Masukkan nilai :
");
scanf("%d", &enqueue);
queue[tail]=enqueue;
urut++;
printf("\nNomor urut : %d\n", urut);
printf("Anda harus menunggu %d
antrian
lagi\n\n", tail);}}
else if(pil==2) {if(tail==-1)
{printf("Antrian
kosong\n\n");}
else {printf("Data dengan nilai %d
sudah dilayani\n\n",
queue[head]);
tmp=queue[head];
for(i=head;i<=tail;i++)
{queue[i]=queue[i+1];}
queue[tail]=tmp;
urut++;
printf("Data dengan nilai %d
masuk antrian kembali dengan no. urut %d\n",queue[tail], urut);
if(tail==0) {printf("Yang
bersangkutan langsung
dilayani\n\n");}
else {printf("Yang bersangkutan
harus menunggu %d antrian
lagi\n\n", tail);}}}
else if(pil==3) {if(tail==-1)
{printf("Antrian
kosong\n\n");}
else {for(i=head;i<=tail;i++)
{printf("Antrian ke-%d :%d\n", i+1, queue[i]);}
printf("\n");}}
else if(pil==4) {printf("Anda
telah selesai menggunakan program Queue Circular\n\n");}
else {printf("Pilihan yang anda
masukkan tidak
valid\n\n");}
} while(pil!=4);
getch();
}
Tampilan awal outputnya
:
Masuk antrian :
Melihat isi antrian :
Melihat isi antrian
sebelum dihapus :
Menghapus antrian :
5.Shorting
Sorting merupakan suatu
proses untuk menyusun kembali humpunan obyek menggunakan aturan tertentu.
Sorting disebut juga sebagai suatu algoritma untuk meletakkan kumpulan elemen
data kedalam urutan tertentu berdasarkan satu atau beberapa kunci dalam
tiap-tiap elemen. Pada dasarnya ada dua macam urutan yang biasa digunakan dalam
suatu proses sorting:
Sorting
By Selection sort
merupakan pengurutan
berdasarkan pemilihan.
Implementasi dari
Sorting By Selection dalam pemrograman :
Selection sort :
#include
<conio.h>
#include
<stdio.h>
#include
<stdlib.h>
#define MAX 10
int Data[MAX];
// Fungsi pertukaran
bilangan
void Tukar (int *a, int
*b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void SelectionSort()
{
int i, j, k;
for(i=0; i<MAX-1;i++)
{
k = i;
for (j=i+1; j<MAX; j++)
if(Data[k] > Data[j])
k = j;
Tukar(&Data[i], &Data[k]);
}
}
void main()
{
int i;
srand(0);
// Membangkitkan
bilangan acak
printf("DATA SEBELUM TERURUT");
for(i=0; i<MAX; i++)
{
Data[i] = (int) rand()/1000+1;
printf("\nData ke %d : %d ", i,
Data[i]);
}
SelectionSort();
// Data setelah terurut
printf("\nDATA SETELAH TERURUT");
for(i=0; i<MAX; i++)
{
printf("\nData ke %d : %d ", i,
Data[i]);
}
getch();
}
Hasil outputnya :
Sorting
By Insertion sort
Merupakan pengurutan
dengan melakukan penyisipan.
Implementasi dari
Sorting By Insertion:
#include
<iostream.h>
#include
<conio.h>
int data[10],data2[10];
int n;
void tukar(int a, int
b)
{
int t;
t = data[b];
data[b] = data[a];
data[a] = t;
}
void insertion_sort()
{
int temp,i,j;
for(i=1;i<=n;i++)
{
temp = data[i];
j = i -1;
while(data[j]>temp && j>=0)
{
data[j+1] = data[j];
j--;
}
data[j+1] = temp;
}
}
int main()
{
cout<<"\t* METODE INSERTION SORT
*"<<endl<<endl;
//Input Data
cout<<"Masukkan Jumlah Data :
";
cin>>n;
for(int i=1;i<=n;i++)
{
cout<<"Masukkan data ke
"<<i<<" : ";
cin>>data[i];
data2[i]=data[i];
}
insertion_sort();
cout<<"\n\n";
//tampilkan data
cout<<"Data Setelah di Sort :
";
for(int i=1; i<=n; i++)
{
cout<<" "<<data[i];
}
cout<<"\n\nSorting Selesai";
getch();
return 0;
}
Hasil outputnta :
6.Searching
Pencarian (Searching)
merupakan proses yang fundamental dalam pemrograman, guna menemukan data
(nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian
itu sendiri adalah untuk memvalidasi (mencocokkan) data.
Metode Pencarian dibagi
menjadi 2 yaitu :
Pencarian
secara beruntun
Pencarian secara beruntun
dilakukan dengan cara memeriksa elemen larik satu per satu mulai dari indeks=1
hingga indeks dimana elemen tersebut ditemukan. Bila indeks maksimum telah
dilampaui maka berarti elemen tersebut tidak ditemukan.
Contoh: Andaikan larik
A=[20 15 18 35 40 27], dan x=8. Bila A diperiksa mulai dari indeks=1 maka akan
ditemukan pada indeks=3. Namun, bila x=45 maka pemeriksaan tidak berasil
menemukan karena hingga indeks=6 elemen ini tetap tidak ditemukan.
Contoh program :
#include
<stdio.h>
#include <iostream.h>
#include
<conio.h>
main()
{
int n,i,posisi,x,ketemu;
int a[5];
printf("Pencarian data dengan
sequential search \n\n");
printf("Banyak data : ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Masukan bilangan : ");
scanf("%d",&a[i]);
}
printf("Data yang dicari : ");
scanf("%d",&x);
ketemu=0;
i=0;
while((ketemu == 0)&&(i<n))
{
if(a[i]==x)
{
ketemu=1;
posisi=i;
}
else
i=i+1;
}
if(ketemu==1)
printf("%d Ditemukan pada posisi
%d\n",x,posisi+1);
else
printf("%d Tidak ditemukan \n",x);
getch();
}
Hasil outputnya :
Pencarian
Bagi–Dua (Binary Search)
Pencarian bagi-dua
adalah teknik yang diterapkan hanya pada elemen larik yang telah terurut
(Sorted). Pencarian beruntun memiliki satu kekurangan, yaitu dalam kasus
terburuk (Elemen yang dicari berada pada posisi terakhir) maka pencarian harus
dilakukan sepanjang larik. Semakin banyak elemen semakin banyak pencarian yang
harus dilakukan.
Contoh : Andaikan larik
A = [7 10 13 16 18 21 76 81], dan x=10. Pada contoh ini, jumlah elemen m=8
sehingga indeks =8/2=4 dan A[4]=16. Namun, x tidak sama dengan A[4].
Implementasi binary
search dalam program :
#include
<iostream.h>
#include
<conio.h>
int
data[10]={1,3,4,7,12,25,40,65,78,90};
int binary_search(int
cari)
{
int a,b,c;
int n=10;
a=0;
b=n-1;
int ketemu=0;
while (a<=b && ketemu==0)
{
c=(a+b)/2;
if (data[c]==cari)
ketemu=1;
else
if(cari<data[c])
b=c-1;
else a=c+1;
}
if(ketemu==1) return 1; else return 0;
}
void main()
{
clrscr();
int cari, hasil;
cout<<"masukan data yang ingin di
cari= ";
cin>>cari;
hasil = binary_search(cari);
if(hasil==1)
{
cout<<"data
ada!"<<endl;
}
else
if(hasil==0)
cout<<"data tidak
ada!"<<endl;
getch();
}
Hasil outputnya :
REFERENSI
Desphande
P.S., O.G. Kakde (2004). C dan Data Structures. Charles RiverMedia, Inc.
Massachusetts
Heriyanto,
Imam, Budi Raharjo (2003). Pemrograman Borland C++ Builder. Informatika
Bandung.
Indrajit,
Richardus Eko. Manajemen Sistem Informasi dan Teknologi Informasi.
Indrajit,
Richardus Eko. Kajian Strategis Analisa Cost-Benefit Investasi Teknologi
Informasi.
Lidya,
Leoni, rinaldi Munir (2002). Algoritama dan Pemrograman dalam Bahas Pascal dan
C.
Informatika
Bandung.
Sanjaya,
Dwi (2005). Asyiknya Belajar Struktur Data di Planet C++. Elex Media
Komputindo.
Solichin,
Achmad (2003). Pemrograman Bahasa C dengan Turbo C. IlmuKomputer.Com.
Wahono,
Romi Satria(2003). Cepat MahirBahasa. IlmuKomputer.Com.