Click here to load reader
Upload
av-ri
View
80
Download
3
Embed Size (px)
DESCRIPTION
tugas struktur data semester 2
Citation preview
ARRAY
ARRAY
Array adalah sekelompok data sejenis yang disimpan ke dalam variabel
dengan nama yang sama, dengan memberi indeks pada variabel untuk
membedakan antara yang satu dengan yang lain.
KARAKTERISTIK ARRAY
- Mepunyai batasan dari pemesanan alokasi memori (bersifat statis)
- Mempunyai tipe data sama (bersifat homogen)
- Dapat diakses secara acak.
Perbedaan Array dengan Variable biasa
- Variable biasa satu variable untuk menyimpan HANYA satu data/
nilai.
- Variable array satu variable untuk menyimpan BANYAK data/
nilai.
Deklarasi Array 1 Dimensi
tipe nama_var[max_data];
Contoh:
int a[5];
float x[100];
char nama[25];
.
dst.
Cara mengakses data bertipe array
nama_variabel[alamat]
Misal : Array a
27 23 35 46 87 data yang tersimpan di
array
0 1 2 3 4 alamat array (dimulai dari
0)
a[0] = 27
a[1] = 23
.
.
a[4] = 87
Menginputkan data ke array
Data dapat diinputkan untuk setiap emelen array. Tetapi jika jumlah
elemen array banayk, tentunya cara ini tidak efisien. Oleh karena itu
dapat digunakan bantuan instruksi perulangan untuk input datanya.
Contoh 1:
#include <iostream.h>
#include <conio.h>
main() {
int a[5];
cout<<"Data ke 0 = ";cin>>a[0];
cout<<"Data ke 1 = ";cin>>a[1];
cout<<"Data ke 2 = ";cin>>a[2];
cout<<"Data ke 3 = ";cin>>a[3];
cout<<"Data ke 4 = ";cin>>a[4];
int jumlah;
jumlah=a[0]+a[1]+a[2]+a[3]+a[4];
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Contoh 2:
#include <iostream.h>
#include <conio.h>
main() {
int a[5];
int jumlah=0;
for(int i=0;i<5;i++)
{ cout<<"Data ke "<<i<<" = ";cin>>a[i];
jumlah+=a[i];
}
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Tipe array juga dapat digabungkan dengan pointer. Untuk itu kita akan
melakukan perubahan pada contoh 3 menjadi sebagai berikut:
Contoh 3:
#include <iostream.h>
#include <conio.h>
main() {
int *a=new int[5];
int jumlah=0;
for(int i=0;i<5;i++)
{ cout<<"Data ke "<<i<<" = ";cin>>a[i];
jumlah+=a[i];
}
cout<<"\n\nJumlahnya = "<<jumlah;
getch();
}
Perhatikan contoh 3 diatas pada pengaksesan datanya. Jika array
dideklarasikan sebagai pointer, maka untuk pengaksesan datanya cukup
dituliskan sebagai array. Tetapi kita tetap bisa menuliskannya sebagai
pointer tanpa harus menyertakan alamat arraynya. Jika demikian maka
data akan diambilkan dari data pertama, atau data pada alamat ke 0.
Sehingga misalkan pada akhir program contoh 3 diatas kita tambahkan
instruksi :
cout<<"\nData = "<<*a;
atau instuksi :
cout<<"\nData = "<<a[0];
akan mempunyai arti yang sama, data akan diambil dari data pertama
(alamat 0).
Selain itu untuk input data dan proses penjumlahan, dapat juga dibuat
dalam bentuk fungsi seperti pada contoh 4. Perhatikan pada saat tipe
array menjadi parameter fungsi, jumlah data yang tersimpan dalam array
boleh ditulis boleh tidak (optional). Sehingga bisa ditulis dengan : b[] saja
Contoh 4 :
#include <iostream.h>
#include <conio.h>
void input_array(int b[],int n)
{ for(int i=0;i<n;i++)
{ cout<<"Data ke "<<i<<" = ";cin>>b[i]; }
}
int jumlah(int b[],int n)
{ int hasil=0;
for(int i=0;i<n;i++)
hasil+=b[i];
return hasil;
}
main() {
int a[100];
int bd;
cout<<"Masukkan banyaknya data = ";cin>>bd;
input_array(a,bd);
cout<<"\n\nJumlahnya = "<<jumlah(a,bd);
getch();
}
Mengurutkan Elemen Array
Ada banyak sekali metode untuk mengurutkan data, antara lain Exchange
Sort, Selection Sort, Insertion Sort, Bubble Sort, Quick Sort, Shell Sort,
Binary Insertion Sort, dan masih banyak lagi.
Dari sekian banyak metode, hanya metode Bubble Sort dan Insertion Sort
saja yang akan saya bahas karena kedua metode ini merupakan metode
yang paling mudah dan banyak digunakan. Untuk metode Selection Sort
langkah-langkahnya adalah sebagai berikut :
1. Proses 1: variabel indek diberi nilai 1 (data ke-1) kemudian data indek
dibandingkan dengan data ke-2. Jika data indek lebih besar maka nilai
indeknya diganti dengan 2 (data ke-2), jika tidak nilai indeknya tetap.
Kemudian data indek dibandingkan lagi dengan data ke-3, lebih besar?
Nilai indek ditukar! Demikian seterusnya. Setelah selesai, nilai indek
diperiksa apakah nilai indek berubah atau tidak. Jika nilai indek
mengalami perubahan maka data ke-1 ditukar dengan data indek.
2. Pada proses 2: variabel indek diberi nilai 2 (data ke-2) kemudian data
indek dibandingkan dengan data ke-3. Jika data indek lebih besar maka
nilai indeknya diganti dengan 3 (data ke-3). Kemudian data indek
dibandingkan lagi dengan data ke-4, lebih besar? Nilai indek ditukar!
Demikian seterusnya. Setelah selesai, nilai indek diperiksa apakah nilai
indek berubah atau tidak. Jika nilai indek mengalami perubahan maka
data ke-2 ditukar dengan data indek.
3. Demikian untuk proses selanjutnya dimana banyak prosesnya adalah
jumlah elemen array dikurangi satu.
Berikut program lengkap dari metode Selection Sort dalam bahasa C++
adalah :
1. #include <iostream>
2. using namespace std;
3. int a[10];
4. void input(int data,int i) {
5. a[i] = data;
6. }
7. void tampil() {
8. for(int i=0; i<10; i++)
9. cout << a[i] << " ";
10. cout << endl;
11. }
12. void tukar(int data1, int data2) {
13. long temp = a[data1];
14. a[data1] = a[data2];
15. a[data2] = temp;
16. }
17. void selectionSort() {
18. int i,j,indek;
19. for(i=0; i<5-1; i++) {
20. indek=i;
21. for(j=i+1; j<5; j++)
22. if(a[indek] > a[j] )
23. indek=j;
24. tukar(i,indek);
25. }
26. }
27. void main() {
28. input(57,0);
29. input(89,1);
30. input(49,2);
31. input(51,3);
32. input(12,4);
33. input(90,5);
34. input(1,6);
35. input(0,7);
36. input(63,8);
37. input(25,9);
38. tampil();
39. selectionSort();
40. tampil();
41. }
Metode Bubble Sort mempunyai langkah-langkah sebagai berikut :
1. Membandingkan data ke-1 dengan data ke-2, jika data ke-1 lebih besar,
maka kedua data ditukar.
2. Kemudian membandingkan data ke-2 dengan data ke-3, jika data ke-2
lebih besar, kedua data ditukar lagi.
3. Demikian seterusnya sampai data terakhir, sehingga data
kedudukannya akan bergeser geser.
4. Untuk proses 2, pembandingan (pergeseran data) hanya sampai pada
data terakhir dikurangi satu.
Kode program lengkapnya dalam bahasa C++ adalah sebagai berikut :
1. #include <iostream>
2. using namespace std;
3. int a[10];
4. void input(int data,int i) {
5. a[i] = data;
6. }
7. void tampil() {
8. for(int i=0; i<10; i++)
9. cout << a[i] << " ";
10. cout << endl;
11. }
12. void tukar(int data1, int data2) {
13. long temp = a[data1];
14. a[data1] = a[data2];
15. a[data2] = temp;
16. }
17. void bubSort() {
18. int i, j;
19. for(i=10-1; i>1; i--)
20. for(j=0; j<i; j++)
21. if( a[j] > a[j+1] ) tukar(j, j+1);
22. }
23. void main() {
24. input(57,0);
25. input(89,1);
26. input(49,2);
27. input(51,3);
28. input(12,4);
29. input(90,5);
30. input(1,6);
31. input(0,7);
32. input(63,8);
33. input(25,9);
34. tampil();
35. bubSort();
36. tampil();
37. }
Contoh lain penggunaan array 1D untuk sorting data
Ini adalah proses untuk mengurutkan data yang tersimpan di array
dengan metode Bubble Sort.
Contoh 5:
#include <iostream.h>
#include <conio.h>
void masukan(int a[],int n)
{
for(int i=0;i<n;i++)
{ cout<<"Data ke "<<i<<" = ";
cin>>a[i];
}
}
void urutkan(int a[], int n)
{ int temp;
for(int i=0;i<n;i++)
for(int j=0;j<(n-i);j++)
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
void tampil(int a[], int n)
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
main() {
int a[100];
int jml;
cout<<"Banyak data = ";cin>>jml;
masukan(a,jml);
urutkan(a,jml);
cout<<"\n\nSetelah diurutkan ";
tampil(a,jml);
getch();
}
Pada contoh program diatas ada tiga fungsi, fungsi pertama digunakan
untuk menginputkan data ke dalam array, fungsi kedua untuk
mengurutkan arraynya, dan fungsi ketiga untuk menampilkan data yang
tersimpan di array ke layar.
Array 2 Dimensi
Contoh deklarasi :
int a[4][5];
0 1 2 3
0 25 40 26 12
1 6 8 12 5
2 1 3 8 9
3 15 22 13 19
4 0 5 7 15
Mengakses data :
a[0][0] = 25
a[0][1] = 40
.
.
dst
Penggunaan array 2D untuk menjumlahkan dua matrik
Matrik asal adalah a dan b, dijumlahkan dan hasilnya disimpan di matrik c.
Syarat agar matrik dapat dijumlahkan adalah keduanya mempunyai
ukuran yang sama.
Baris matrik 1 = Baris matrik 2
Kolom matrik 1 = Kolom matrik 2
Contoh 6:
#include <iostream.h>
#include <conio.h>
void masukan(int a[10][10],int b,int k)
{ for(int i=0;i<b;i++)
for(int j=0;j<k;j++)
{cout<<"Data ke "<<i<<j<<" = ";cin>>a[i][j]; }
}
void jumlah(int a1[][10],int a2[][10],int a3[][10],int b1,int k1)
{ for(int i=0;i<b1;i++)
for(int j=0;j<k1;j++)
a3[i][j]=a1[i][j]+a2[i][j];
}
void tampilkan(int a[10][10],int b,int k)
{ for(int i=0;i<b;i++)
{ for(int j=0;j<k;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
main() {
int dt1[10][10],dt2[10][10],dt3[10][10];
int b1,k1;
cout<<"Jumlah baris matrik = ";cin>>b1;
cout<<"Jumlah kolom matrik = ";cin>>k1;
cout<<"\nMatrik pertama\n";
masukan(dt1,b1,k1);
cout<<"\nMatrik kedua\n";
masukan(dt2,b1,k1);
jumlah(dt1,dt2,dt3,b1,k1);
clrscr();
cout<<"\nMatrik pertama\n";
tampilkan(dt1,b1,k1);
cout<<"\nMatrik kedua\n";
tampilkan(dt2,b1,k1);
cout<<"\nMatrik hasil penjumlahan\n";
tampilkan(dt3,b1,k1);
getch();
}
Perhatikan pada saat array 2D menjadi parameter fungsi, jumlah baris
boleh ditulis boleh tidak, tetapi jumlah kolom harus ditulis. Tipe array
dapat dikembangkan menjadi array multidimensi. Misal 3D, 4D, dan
sebagainya.
KEUNGGULAN DAN KELEMAHAN ARRAY
Keunggulan array adalah sebagai berikut :
1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di
array dapat diacu secara langsung tanpa melalui elemen-elemen
lain.
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri
ke elemen-elemen tetangga, baik elemen pendahulu atau elemen
penerus 3
3. Jika elemen-elemen array adalah nilai-nilai independen dan
seluruhnya harus terjaga, maka penggunaan penyimpanannya
sangat efisien.
Kelemahan array adalah sebagai berikut :
Array mempunyai fleksibilitas rendah, sehingga tidak cocok untuk
berbagai aplikasi karena array mempunyai batasan sebagai berikut :
1. Array harus bertipe homogen. Kita tidak dapat mempunyai array
dimana satu elemen
adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-
tipe lain
2. Kebanyakan bahasa pemrograman mengimplementasikan array
statik yang sulit
diubah ukurannya di waktu eksekusi. Bila penambahan dan
pengurangan terjadi
terus-menerus, maka representasi statis
Kelemahan lain:
• Tidak efisien dalam penggunaan memori
• Menyiakan banyak waktu komputasi
• Pada suatu aplikasi, representasi statis tidak dimungkinkan
Bila penambahan dan pengurangan terjadi terus menerus, maka
representasi statis (array):
1. Tidak efisien dalam penggunaan memory
2. Menyiakan banyak waktu komputasi
3. Pada suatu aplikasi, representasi statis tidak di mungkinkan