RANGKUMAN
MATERI
PRAKTIKUM
STRUKTUR DATA
NAMA : PUTU ARY ANDHIKA PANGESTU
NIM : 140010224
KELAS : AB141
dosen : IB Ketut Surya Arnawa, S.Kom
dosen : IB Ketut Surya Arnawa, S.Kom
SEKOLAH TINGGI
MANAJEMEN INFORMATIKA DAN TEKNIK
KOMPUTER
(STMIK) STIKOM BALI
TAHUN 2015
Variable
Sebuah
identifier yang mempunyai nilai dinamis. Arti kata dinamis disini bermaksud
bahwa nilai variable tersebut dapat kita ubah sesuai kebutuhan dalam program.
Tipe_datanama_variabel;
Apabila
kita akan mendeklarasikan beberapa variable yang bertipe sama, maka kita dapat
menyingkat penulisannya denga menggunakan bentuk umum dibawah ini :
Tipe_datanama_variabel1,nama_variabel2,nama_variabel3;
Contoh : int A, B, C;
Ketentuan pemberian nama untuk variabel :
1. Tidak boleh sama dengan nama keyword reserved, function, dan
harus unik.
2. Maksimum 32 karakter. Bila lebih, maka karakter selebihnya
tidak akan diperhatikan oleh komputer.
3. Case sensitive : membedakan huruf besar dan kecil
4. Karakter pertama harus huruf atau underscore (_)
5. Tidak boleh mengandung spasi / blank , tanda – , dan tanda #
INISIALISASI VARIABEL
Dalam
konteks ini, inisialisasi dapat didefinisikan sebagai proses pengisian nilai
awal (nilai default) ke dalam suatu variabel. Dalam C++, pengisian nilai dilakukan
dengan menggunakan operator sama dengan (=)
Bentuk
umum yang digunakan untuk melakukan inisialisasi variabel adalah sebagai
berikut:
tipe_data
nama_variabel = nilai_awal;
atau
tipe_data
nama_variabel = nilai_awal1, nilai_variabel2 = nilai_awal2,…..;
contoh:
int
A=9;
Pada
contoh diatas, kita melakukan inisialisasi terhadap variabel A dengan nilai 9.
Apabila kita ingin melakukan inisialisasi terhadap lebih dari satu variabel,
maka sintaknya dapat diubah menjadi seperti berikut:
int
A=10, B=15, C=25;
Dengan
cara seperti ini, variabel A akan diisi dengan nilai awal 10, B dengan nilai
15, dan C dengan nilai 25.
Inisialisasi
nilai tidak harus dilakukan untuk semua variabel yang ada, seperti yg
ditunjukkan oleh kode berikut:
int
A, B=15, C;
Kali
ini hanya variabel B yang diisi dengan nilai awal
Array
array
adalah variabel yang dapat menyimpan sejumlah data sejenis (bertipe data sama).
array adalah variabel yang dapat
menyimpan sejumlah data sejenis
(bertipe data sama).
Jenis array :
a. Array
berdimensi satu
b. Array
berdimensi dua
1. Array
Satu Dimensi
Deklarasi Array tipe_data
nama_array[ukuran];
Keterangan :
tipe_data
: menyatakan jenis tipe data elemen array
(int, char, float, dll)
nama_array
: menyatakan nama
variabel yang dipakai.
ukuran
: menunjukkan jumlah maksimal elemen array.
Nilai ke-1
|
Nilai ke-2
|
…….
|
Nilai ke-N
|
Nilai ke-2
|
Alamat ke-2
|
……
|
Alamat ke-N
|
0
|
1
|
….
|
N
|
Keterangan
Nilai
: nilai elemen array
Alamat : alamat elemen array
0,1
: indeks elemen array
Untuk
mendeklarasikan sebuah array dalam C++, kita harus menggunakan tanda[]. Adapun
bentuk umum dari pendeklarasikannya adalah sebagai berikut :
Tipe_datanama_array[jumlah_elemen];
Sebagai
contoh kita ingin mendeklarasikan sebuah array (dengan nama DIKA) yang memiliki
2 elemen dengan tipe data int, maka
bentuk deklarasiknya adalah sebagai berikut :
Int DIKA[25];
Mengisikan Nilai ke dalam Elemen Array
kita
dapat mengisikan nilai ke dalam elemen-elemen array secara langsung untuk
setiap elemen, misalnya sebagai berikut :
a[0]
= 10;
a[1]
= 11;
a[2]
= 12;
namun
cara diatas tidak direkomendasi karena tidak efisien. Pada umunmnya cara yang
biasa digunakan ialan menggunakan looping.
Sebagai contoh apabila kita ingin melakukan pengisian 25 elemen array, maka
kita dapat melakukannya seperti dibawah ini:
for (int c=0; c<25; c++)
{
Cout<<”A[“<<c<<”]
= “;
Cin>>A[c];
}
Berikut
merupakan contoh program yang didalamnnya terdapat proses pengisian array
dengan menggunakan proses pengulangan.
#include <iostream.h>
#include<conio.h>
Void main()
Int main ()
//mendeklarasikan array A
dengan 5 buah elemen betipe int
{
Int
A[5];
//memasukkan nilai ke
dalam elemen array
For
(int c=0; c<5; c++)
{
Cout<<”A[“<<c<<”]
= ;
Cin>>A[c];
}
Getch ();
}
2. Array dua Dimensi
Adalah
array yang mempunyai dua buah subskrip, yaiut baris dan kolom. Bentuk umum
pendeklarasian sebuah array dua dimensi ialah sebagai berikut:
- Sering kali digambarkan/dianalogikan sebagai sebuah matriks.
-
jika array berdimensi satu hanya terdiri dari 1 baris dan banyak kolom, array
berdimensi dua terdiri dari banyak baris
dan banyak kolom yang bertipe sama
Deklarasi
Array
tipe_data
nama_array[jml_baris][jml_kolom];
Keterangan :
tipe_data
: menyatakan jenis tipe data elemen array
(int, char, float, dll)
nama_array
: menyatakan
nama variabel yang dipakai.
jml_baris
: menunjukkan jumlah maksimal baris.
jml_kolom
:
menunjukkan jumlah maksimal kolom.
atau
Tipe_datanama_array[jumlah_elemen_baris][jumlah_elemen_kolom];
Sebagai
contoh apabila kita akan melakukan penjumlahan 2 buah matrik ordo 3x2, maka
contoh kita dapat menuliskan kode program seperti berikut :
#include <iostream.h>
#include<conio.h>
Void main ()
{
//mendefinisikan
tipee data yang berupa array dua dimensi
Typedef
in MATRIX32 [3] [2] ;
//mendeklarasikan variable untuk indeks pengulangan
Int j, k ;
//mengisikan nilai kedalam elemen-elemen array A
For (j=0; j<3; j++)
{
For
(k=0; k<2 k++)
{
Cout<<”A[“<<j<<”]
= “ ;
Cin>>A[j]
[k] ;
}
}
Cout<<endl;
//mengisikan nilai kedalam elemen-elemen array B
For (j=0; j<3; j++)
{
For
(k=0; k<2; k++)
{
Cout<<”B[“<<j<<”]
[“<<k<<”] = “ ;
Cin>>B
[j] [k] ;
}
}
Cout<<endl;
//melakukan penjumlahan A dan B dan menyimpannya ke dalam array
C
For (j=0; j<3; j++)
{
(k=0;k<2;
k++)
{
C [j] [k] = A [j] [k] + B [j] [k] ;
}
}
//menampilkan hasil penjumlahan
For (j=0; j<3; j++)
{
(k=0;
k<2; k++)
{
Cout<<”C[“<<j<<”]
[“<<k<<”] = “
<<C
[j] [k] <<endl;
}
}
Getch
();
}
Contoh
yang diberikan dari program diatas adalah sebagai berikut :
A [0] [0] = 1
A [0] [1] = 2
A [1] [0] = 3
A [1] [1] = 4
A [2] [0] = 5
A [2] [1] = 6
B [0] [0] = 1
B [0] [1] = 2
B [1] [0] = 3
B [1] [1] = 4
B [2] [0] = 5
B [2] [1] = 6
C [0] [0] = 2
C [0] [1] = 4
C [1] [0] = 6
C [1] [1] = 8
C [2] [0] = 10
C [2] [1] = 12
STACK
Stack berarti
tumpukan, konsep stack digunakan dalam struktur data. dalam stack berlaku
konsep LIFO ( Last In First Out ).
· Dalam
struktur data Stack menggunakan istilah :
1. PUSH : simpan, masuk,
insert, tulis
2. POP
: ambil, keluar, delete, baca
· Stack
ada 2 jenis yaitu :
1. Single Stack
2. Double Stack
1. Single Stack
Prinsip dan Konsep Proses Single Stack
Proses pada Single Stack :
- AWAL
(Inisialisasi)
- PUSH (Insert,
Masuk, Simpan, Tulis)
- POP (Delete,
Keluar, Ambil, Baca/Hapus)
Kondisi Single Stack
Kondisi Stack
|
Posisi TOP
|
KOSONG
|
Top = -1
|
PENUH
|
Top = n-1
|
BISA DIISI
|
Top < n-1
|
ADA ISINYA
|
Top > -1
|
A. Algoritma PUSH single stack
if (Top <
n-1)
{ Top = Top + 1;
S[Top] = x;
}
else
cout<<“Stack Penuh”;
B. Algoritma POP Single Stack
if (Top >
-1)
{ x = S[Top];
Top = Top - 1;
}
else
cout<<“Stack Kosong”;
2. Double Stack
Proses Double Stack
·
AWAL (Inisialisasi)
·
PUSH1 (Push untuk Stack1)
·
POP1 (Pop untuk Stack1)
·
PUSH2 (Push untuk Stack2)
·
POP2 (Pop untuk Stack2)
A. Algoritma PUSH double
stack
Periksa apakah Stack1 BISA DIISI
if (Top2 – Top1 >
1)
{ Top1 = Top1 + 1;
S[Top1] = x;
}
else
cout<<“Stack Penuh”;
B. Algoritma POP Single
Stack
Periksa apakah Stack1 ADA ISINYA
if (Top1 >
-1)
{ x = S[Top1];
Top1 = Top1 - 1;
}
else
cout<<“Stack Kosong”;
Contoh Studi Kasus :
buatlah program stack dalam borland c++ yang memerintahkan user
untuk menginputkan 10 data secara acak, dan menampilkan hasil inputan dari user
berupa stack
Berikut Koding dari studi kasus diatas :
#include
<iostream.h>
#include
<conio.h>
void main()
{
int S[n];
int
x,top;
top=-1;
while
(top<=n-1)
{
cout<<"Inputkan isi stack : ";
cin>>x;
top=top+1;
S[top]=x;
}
cout<<"Isi stack : "<<endl;
while
(top>=0)
{
x=S[top];
cout<<x<<" ";
top=top-1;
}
getch();
}
QUEUE
Queue / Antrian adalah suatu kumpulan data yang
mana penambahan elemen hanya bisa dilakukan pada satu ujung (disebut dengan
sisi belakang atau tail/rear) dan penghapusan atau pengambilan elemen dilakukan
lewat ujung lain (disebut dengan sisi depan atau head/front). Antrian
menggunakan prinsip Pertama Masuk Pertama Keluar – First In First Out (FIFO).
Dengan kata lain urutan masuk sama dengan urutan keluar. Antrian banyak
dijumpai dalam kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol
untuk membeli karcis tol; orang-orang yang mengantri di loket untuk membeli
karcis film juga membentuk antrian. Elemen yang pertama kali masuk ke antrian
akan keluar pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu
antrian.
Berikut merupakan ilustrasi queue:
QUEUE DENGAN LINIEAR ARRAY
-
Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di
ujung
Satunya
-
Sehingga membutuhkan variabel Head dan Tail
Create()
•
Untuk menciptakan dan menginisialisasi Queue
•
Dengan cara membuat Head dan Tail = -1
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
(elemen pertama dalam antrian) yang tidak akan berubah-ubah
•
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang,
yaitu menggunakan nilai Tail
IsFull()
•
Untuk mengecek apakah Antrian sudah penuh atau belum
•
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1
adalah
batas elemen array pada C) berarti sudah penuh
Enqueue(data)
•
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen
selalu
ditambahkan di elemen paling belakang
•
Penambahan elemen selalu menggerakan variabel Tail dengan cara
increment
counter Tail
Clear()
•
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan
Head
= -1
•
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus
arraynya,
namun hanya mengeset indeks pengaksesan-nya ke nilai -1
sehingga
elemenelemen Antrian tidak lagi terbaca
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
int f, r;
typedef struct
{
char nim[15];
char nama
[50];
float
ipk;
}mahasiswa;
void awal()
{
f=0;
r=-1;
}
void main()
{
mahasiswa data[n];
int pilih;
awal();
atas:
cout<<"========INPUT DATA DENGAN
BENAR========="<<endl;
cout<<endl<<"1. INSERT
DATA"<<endl;
cout<<"2. DELETE
DATA"<<endl;
cout<<"3. EXIT"<<endl;
cout<<"MASUKKAN PILIHAN ANDA :
";
cin>>pilih;
switch(pilih)
{
case 1 :
if(r<n-1)
{
r=r+1;
cout<<"MASUKKAN NIM MAHASISWA : ";
cin>>data[r].nim;
cout<<"MASUKKAN
NAMA MAHASISWA : ";
cin>>data[r].nama;
cout<<"MASUKKAN IPK
MAHASISWA : ";
cin>>data[r].ipk;
clrscr();
}
else
{
cout<<"ANTRIAN PENUH";
}
goto atas;
break;
case 2 :
if(f<r+1)
{
cout<<endl<<data[f].nim<<endl;
cout<<data[f].nama<<endl;
cout<<data[f].ipk<<endl;
f=f+1;
if((f==r+1) &&
(r==n-1))
{
awal();
}
}
else
{
cout<<"ANTRIAN KOSONG";
}
break;
case 3 :
exit;
break;
default :
cout<<"MASUKKAN ANGKA ANTARA 1 SAMPAI 3";
goto atas;
break;
}
getch();
}
1. SELECTION SORT
Adalah mencari elemen yang tepat untuk diletakkan di posisi yang telah diketahui dan meletakkannya di posisi tersebut setelah data tersebut ditemukan. Selection sort membandingkan elemen yang sekarang denga elemen yang berikutnya sampai dengan yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen yang sekarang maka dicata posisinya dan kemudian ditukar. Pengurutan data dalam struktur data sangat penting untuk data yang bertipe data numeric ataupun karakter. Pengurutan dapat dilakukan secara ascending dan descending. Pengurutan adlah proses menyusun kemnbali data yang sebelumnya telah disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menutur aturan tertentu.
Contoh:
Data Acak : 4 7 1 9 2 6
Ascending : 1 2 4 6 7 9
Descending : 9 7 6 4 2 1
contoh program selection sort :
#include<iostream.h>
#include<conio.h>
int
data[10];
int
n;
void
tukar(int a, int b)
{
int t;
t=data[b];
data[b]=data[a];
data[a]=t;
}
void
selection_sort()
{
int pos,i,j;
for(i=0;i<n-1;i++)
{
pos=i;
for(j=i+1;j<n;j++)
{
if(data[j]<data[pos])pos=j;
}
if(pos!=i) tukar(pos,i);
}
cout<<"selection sort
selesai !"<<endl;
cout<<"Data :
"<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
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;
}
cout<<"insertion sort
selesai ! "<<endl;
cout<<"Data :
"<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
void
input()
{
cout<<"Masukkan
jumlah data = ";
cin>>n;
for(int i=0;i<n;i++)
{
cout<<"Masukkan data ke - "<<(i+1)<<" =
" ;
cin>>data[i];
}
}
void
main()
{
int pil;
clrscr();
do
{
clrscr();
cout<<"1. Input
Data"<<endl;
cout<<"2. Selection
Sort"<<endl;
cout<<"3.
Insertion Sort"<<endl; //tambahkan
cout<<"4.
Exit"<<endl;
cout<<"Masukkan Pilihan anda = ";
cin>>pil;
switch(pil)
{
case 1: input();break;
case 2: selection_sort();break;
case 3: insertion_sort();break; //tambahkan
}
getch();
}
while(pil!=4);
}
INSERTION SORT:
Insertion
sort adalah sebuah algoritma pengurutan yang membandingkan dua elemen data
pertama, mengurutkannya, kemudian mengecek elemen data berikutnya satu persatu
dan membandingkannya dengan elemen data yang telah diurutkan. Karena algoritma
ini bekerja
dengan
membandingkan elemen-elemen data yang akan diurutkan, algoritma ini termasuk
pula dalam comparison-based sort.
Ide
dasar dari algoritma Insertion Sort ini adalah mencari tempat yang
"tepat" untuk setiap elemen array, dengan cara sequential search.
Proses ini
kemudian
menyisipkan sebuah elemen array yang diproses ke tempatnya ang seharusnya.
Proses dilakukan sebanyak N-1 tahapan (dalam sorting
disebut
sebagai "pass"), dengan indeks dimulai dari 0.
Proses
pengurutan dengan menggunakan algoritma Insertion Sort dilakukan dengan cara
membandingkan data ke-i (dimana i dimulai dari data
ke-2
sampai dengan data terakhir) dengan data berikutnya. Jika ditemukan data yang
lebih kecil maka data tersebut disisipkan ke depan sesuai dengan posisi yang
seharusnya.
Berikut
contohnya :
dan hasilnya :
SEARCHING (SEQUENTIAL SEARCH DAN BINERY
SEARCH)
Searching
adalah metode pencarian informasi dalam suatu aplikasi, dengan suatu kunci( key
). Pencarian diperlukan untuk mencari informasi khusus dari table pada saat
lokasi yang pasti dari informasi tersebut sebelumnya tidak diketahui. Pencarian
selalu dinyatakan dengan referensi pada adanya sekelompok data yang tersimpan
secara terorganisasi, kelompok data tersebut kita sebut table.
SEQUENTIAL
SEARCH:
Adalah suatu teknik pencarian data dalam
array (1 dimensi) yang akan menelusuri semua elemen-elemen array dari awal
sampai akhir, dimana data-data tidak perlu diurutkan terlebih dahulu.
Pencarian berurutan menggunakan prinsip
sebagai berikut :
Data yang ada dibandingkan satu per satu
secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak
ditemukan
Contoh studi kasus :
buatlah program dalam borland c++ menggunakan
teknik binary search yang memerintahkan user untuk mencari salah satu data yang
sudah disediakan oleh program. Dan apabila perintah user yang diinputkan sesuai
yang ada dalam program, maka tampilkan " Data Ditemukan ". Dan
apabila data yang diinputkan user tidak tersedia dalam program, maka tampilkan
" Data tidak Ditemukan "
inilah
kodingnya :
#include<iostream.h>
#include<conio.h>
#define
n 9
void
main()
{
int
A[n]={7,11,23,41,50,66,70,84,95};
int
x,lo,hi,mid,flag;
cout<<"Inputkan
data yang dicari : ";
cin>>x;
lo=0;hi=n-1;flag=0;
while
((lo<hi)&&(flag==0))
{
mid=(lo+hi)/2;
if (x==A[mid])
{ flag=1;
}
else if(x<A[mid])
{ hi=mid-1;
}
else
{ lo=mid+1;
}
}
if
(flag==0)
{
cout<<"Data tidak ditemukan" ;
}
else
cout<<"Data ditemukan di indeks ke-"<<mid;
getch
();
}








Tidak ada komentar:
Posting Komentar