MODUL LAB STRUKTUR DATA.pdf

Download MODUL LAB STRUKTUR DATA.pdf

Post on 08-Nov-2015

100 views

Category:

Documents

14 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 1 </p><p>MODUL 1 </p><p>Pertemuan : I dan II </p><p>Judul Modul : Searching pada Array </p><p>Tujuan : </p><p> Memahami beberapa metode searching pada array Dapat membuat program aplikasi searching pada array </p><p>DASAR TEORI </p><p>Pengertian Searching </p><p> Pada suatu data seringkali dibutuhkan pembacaan kembali informasi (information retrieval) dengan cara searching (pencarian). </p><p> Searching adalah pencarian data dengan menelusuri tempat pencarian data tersebut. </p><p> Tempat pencarian data tersebut dapat berupa array dalam memori, bisa juga pada file di dalam external storage (disk). </p><p>Beberapa metode searching pada array: </p><p> Sequential Search Binary Search Interpolation Search </p><p>1. Sequential Search </p><p> Sequential search adalah suatu teknik pencarian data dalam array (1 dimensi) yang akan menelusuri semua elemen-elemen array dari awal sampai akhir </p><p>untuk array yang belum terurut. </p><p> Kemungkinan terbaik (best case) adalah jika data yang dicari terletak di indeks array terdepan (elemen array pertama) sehingga waktu yang dibutuhkan untuk </p><p>pencarian data sangat singkat (minimal). </p><p> Kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan </p><p>untuk pencarian data sangat lama (maksimal). </p><p>Misalnya terdapat array satu dimensi sebagai berikut: </p><p> 0 1 2 3 4 5 6 7 Indeks </p><p>8 10 6 -2 11 7 1 100 Nilai </p><p>Kemudian program akan meminta data yang akan dicari, misalnya 1000. Jika ada, </p><p>maka akan ditampilkan tulisan ADA, sedangkan jika tidak ada maka akan ditampilkan tulisan TIDAK ADA. </p><p>#include </p><p>#include </p><p>void main(){ </p><p>clrscr(); </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 2 </p><p>int data[8] = {8,10,6,-2,11,7,1,100}; </p><p>int cari; </p><p>int flag=0; </p><p>printf("masukkan data yang ingin dicari = ");scanf("%d",&amp;cari); </p><p>for(int i=0;i</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 3 </p><p>int data[7] = {3,12,9,-4,21,6}; </p><p>int cari,i; </p><p>printf("masukkan data yang ingin dicari = ");scanf("%d",&amp;cari); </p><p>data[6] = cari; </p><p>i=0; </p><p>while(data[i] != cari) i++; </p><p>if(i 15 (data tengah), maka: awal = tengah + 1 </p><p>0 1 2 3 4 5 6 7 8 </p><p>3 9 11 12 15 17 23 31 35 A B C </p><p>Karena 17 &lt; 23 (data tengah), maka: akhir = tengah 1 </p><p> 0 1 2 3 4 5 6 7 8 </p><p>3 9 11 12 15 17 23 31 35 A=B=C </p><p> Karena 17 = 17 (data tengah), maka KETEMU! </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 4 </p><p>Programnya: </p><p> int binary_search(int cari){ </p><p>int l,r,m; </p><p>l = 0; </p><p>r = n-1; </p><p>int ktm = 0; </p><p>while(l</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 5 </p><p>Low = 3 + 1 = 4 </p><p>High = 7 </p><p>Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060. </p><p>Berarti tidak ada kunci 060. </p><p>Programnya: </p><p> int interpolationsearch(int key,int n){ </p><p>int low,high,pos,i; </p><p>low=0; </p><p>high=n-1; </p><p>do{ </p><p>pos = (key data[low]) * (high low) / data[high] </p><p>data[low] + low; </p><p>if (data[pos] == key] </p><p> return pos; </p><p>if (data[pos] &gt; key) </p><p> high = pos-1; </p><p>else </p><p> if (data[pos] &lt; key) </p><p> low = pos + 1; </p><p>} while(key &gt;= data[low] &amp;&amp; key </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 6 </p><p> { </p><p> printf("Data %d yang dicari ada %d buah\n",k,j); </p><p> printf("Data tersebut terdapat dalam index ke :"); </p><p> for(i=0;i</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 7 </p><p> else </p><p> { </p><p> top=middle-1; </p><p> } </p><p> } </p><p> if (tm&gt;0) </p><p> { </p><p> printf("Data %d yang dicari ada dalam array\n",k); </p><p> } </p><p> //jika tidak ditemukan </p><p> else </p><p> { </p><p> printf("Data tidak ditemukan dalam array\n"); </p><p> } </p><p>} </p><p>3. Program 3 (Interpolation Search) </p><p>#include </p><p>void main() </p><p>{ </p><p> //deklarasi variable </p><p> int A[10], i,j,k,tkr,low,high,pos,tm; </p><p> //proses penginputan data </p><p> for(i=0;i</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 8 </p><p> if (A[pos] &lt; k) </p><p> low = pos + 1; </p><p> } </p><p> while(k &gt;= A[low] &amp;&amp; k 0) </p><p> { </p><p> printf("data %d yang dicari ada dalam array\n",k); </p><p> } </p><p> //jika tidak ditemukan </p><p> else </p><p> { </p><p> printf("data tidak ditemukan dalam array\n"); </p><p> } </p><p>} </p><p>LATIHAN </p><p>1. Buat program lengkap untuk menggabungkan ketiga metode searching dengan menggunakan menu. Buat dalam bentuk fungsi. Menu-menunya adalah sebagai </p><p>berikut: </p><p>a. Masukkan data b. Cari data c. Edit data d. Tampilkan data </p><p>2. Buat array rekening bank dengan ketentuan : a. Setiap elemen array bertipe struktur: </p><p>(int no_rek, char nama[25], long saldo) </p><p>b. Buatlah fungsi-fungsi sebagai berikut : - Add - Edit - Cari (Sequential) - Setor - Ambil - Transfer - Tutup Rekening (Delete) </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 9 </p><p>MODUL 2 </p><p>Pertemuan : III dan IV </p><p>Judul Modul : Sorting pada Array </p><p>Tujuan: </p><p> Memahami beberapa metode sorting pada array Dapat membuat program aplikasi sorting pada array </p><p>DASAR TEORI </p><p>Sorting (pengurutan) adalah proses menyusun kembali data yang sebelumnya telah </p><p>disusun dengan suatu pola tertentu ataupun secara acak, sehingga menjadi tersusun </p><p>secara teratur menurut aturan tertentu. </p><p>Pada umumnya ada 2 macam pengurutan, yaitu: </p><p> Pengurutan secara ascending (urut naik). </p><p> Pengurutan secara descending (urut turun). </p><p>Ada beberapa metode sorting pada array. Dalam praktikum ini akan dibahas lima di </p><p>antara metode-metode sorting yang ada, yaitu </p><p> Bubble sort </p><p> Selection sort </p><p> Insertion sort </p><p> Quick sort </p><p> Merge sort </p><p>Algoritma-algoritma ini mempunyai efek yang berbeda dalam setiap prosesnya, ada </p><p>yang mudah digunakan, ada yang mempunyai proses yang sangat cepat, dan </p><p>sebagainya. </p><p>Hal yang umum dilakukan dalam proses sorting adalah proses pertukaran antara 2 </p><p>elemen atau lebih (analogi memindah air dalam gelas). Untuk melakukan proses </p><p>pertukaran akan diperlukan adanya variable baru yang digunakan sebagai variable </p><p>penampung. </p><p> //fungsi penukar data </p><p>void tukar (int a[], int i, int j) { </p><p>int tampung = a[i]; </p><p>a[i] = a[j]; </p><p>a[j] = tampung; </p><p>} </p><p>1. Bubble Sort </p><p> Bubble sort merupakan metode sorting paling mudah, namun paling lambat </p><p>dibandingkan dengan metode yang lain. </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 10 </p><p> Bubble sort mengurutkan data dengan cara membandingkan elemen sekarang </p><p>dengan elemen berikutnya. </p><p> Bisa dilakukan baik dari kepala array maupun ekor array. </p><p> Proses yang berlangsung: </p><p> Untuk ascending: jika elemen sekarang lebih besar daripada elemen </p><p>berikutnya, maka kedua elemen tersebut ditukar. </p><p> Untuk descending: jika elemen sekarang lebih kecil daripada elemen </p><p>berikutnya, maka kedua elemen tersebut ditukar. </p><p> Contoh fungsi bubble sort: //Bubble Sort </p><p>void bubble (int a[], int n) { </p><p>int i,j; </p><p>for (i=n;i&gt;=1;i--) { </p><p> for (j=2;ja[j]) </p><p> tukar (a,j-1,j); </p><p> } </p><p>} </p><p>2. Exchange Sort </p><p> Mirip dengan bubble sort. </p><p> Perbedaannya: dalam exchange sort ada elemen yang berfungsi sebagai pusat </p><p>(pivot), pertukaran hanya akan dilakukan jika diperlukan saja dari pivot </p><p>tersebut. </p><p> Contoh fungsi exchange sort: </p><p>//Exchange Sort </p><p>void exchange (int a[], int n) { </p><p>int i,j; </p><p>for (i=0;i</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 11 </p><p>int i,j,pos; </p><p>for (i=1;i</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 12 </p><p> Langkah: </p><p>o Memilih sebuah elemen pembanding (pivot), misal x. o Semua elemen dari deret tersebut yang kurang dari x diletakkan pada </p><p>bagian pertama. </p><p>o Kemudian semua elemen dari yang lebih besar dari x diletakkan pada bagian kedua. </p><p>o Untuk elemen yang sama dengan x bisa diletakkan di mana saja bahkan bisa juga di antara kedua bagian tersebut. </p><p> Algoritma partisi: </p><p>Masukan : array A[n] dengan n elemen </p><p>Keluaran : permutasi dari array sedemikian sehingga smua elemen A[0], , A[j] kurang dari atau sama dengan semua elemen A[i], , A[n-1] (i &gt; j) </p><p>Metode : pilih elemen di pertengahan array sebagai elemen pembanding x </p><p>Buat i = 0 dan j = n-1 </p><p>Selama i j </p><p>Cari elemen pertama A[i] yang lebih besar atau sama dengan x </p><p>Cari elemen terakhir A[j] yang lebih kecil atau sama dengan x </p><p>Jika i j </p><p>Tukarkan A[i] dan A[j] </p><p>Buat i = i+1 dan j = j-1 </p><p>o Setelah mempartisi, prosedur sorting akan dilakukan secara rekursif. Hingga proses rekursif tersebut akan berhenti saat sebuah bagian hanya </p><p>tinggal terdapat satu elemen saja. </p><p>o Tidak baik digunakan jika elemen-elemen yang akan diurutkan hanya ada sedikit atau sudah hamper terurut, karena jika menggunakan metode ini </p><p>justru akan melakukan perulangan yang tidak berguna dan lama. </p><p>o Mempunyai algoritma dan program yang cukup kompleks. o Contoh fungsi quick sort: </p><p>//Quick Sort </p><p>void quicksort (int a[],int l,int r) { </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 13 </p><p>int i,j,v; </p><p>if(r&gt;1) { </p><p>v=a[r];i=l-1;j=r; </p><p> for(;;) { </p><p> while(a[++i]v); </p><p> if(i&gt;=j) </p><p> break; </p><p> tukar(a,i,j) </p><p> } </p><p> tukar(a,i,r); </p><p> quicksort(a,l,i-1); </p><p> quicksort(a,i+1,r); </p><p> } </p><p>} </p><p>PERCOBAAN </p><p>1. Tuliskan program untuk mengurutkan barisan karakter dengan menggunakan </p><p>bubble sort berikut ini, kemudian lihat hasilnya dan beri penjelasan // Program untuk mengurutkan barisan karakter </p><p>// menggunakan bubble sort </p><p>#include </p><p>#include </p><p>using namespace std; </p><p>void Urutkan(char* str) </p><p> { </p><p> unsigned int n = strlen(str); </p><p> unsigned int i, j; </p><p> for (i = 1; i &lt; n; i++) </p><p> for (j = n-1; j &gt;= i; j--) </p><p> if (str[j] &lt; str[j-1]) </p><p> { </p><p> char temp = str[j]; </p><p> str[j] = str[j-1]; </p><p> str[j-1] = temp; </p><p> }; </p><p> }; </p><p>int main() </p><p> { </p><p> char BarisanKarakter[1024]; </p><p> // Input barisan karakter </p><p> cout &gt; BarisanKarakter; </p><p> // Urutkan </p><p> Urutkan(&amp; BarisanKarakter[0]); </p><p> // Tampilkan hasilnya </p><p> cout </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 14 </p><p>LATIHAN </p><p>1. Buatlah program lengkap yang dapat menampilkan semua hasil sorting dalam lima metode sorting yang dijelaskan di depan dengan menggunakan menu. </p><p>2. Dari program tersebut tambahkanlah bagian program yang dapat menampilkan proses sorting yang sebenarnya terjadi (tidak hanya hasil akhirnya saja). </p><p>3. Buat program yang membaca masukan berupa string </p><p>QWERTYUIOPASDFGHJKLZXCVBNM. Kemudian program melakukan proses </p><p>sorting sehingga menjadi string ABCDEFGHIJKLMNOPQRSTUVWXYZ. </p><p>4. Buat program dengan masukan NIM, nama, dan umur untuk 10 mahasiswa, kemudian lakukan sorting terhadap masukan berdasarkan NIM. </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 15 </p><p>MODUL 3 </p><p>Pertemuan : V dan VI </p><p>Judul Modul : Stack dengan Array </p><p>Tujuan: </p><p> Memahami pengertian stack Dapat mengimplementasikan stack dengan menggunakan array </p><p>DASAR TEORI </p><p>Stack atau tumpukan adalah suatu struktur data yang seolah-olah terlihat seperti data </p><p>yang tersusun secara menumpuk; dalam hal ini, ada data yang terletak di atas data yang lainnya. Penyimpanan data di dalam stack bersifat LIFO (Last In First Out), </p><p>yang berarti bahwa data yang masuk terakhir akan keluar pertama. </p><p>Beberapa operasi dasar pada Stack antara lain: </p><p> IsFull() mengecek apakah stack sudah penuh </p><p> IsEmpty() mengecek apakah stack sudah kosong </p><p> Push() menambah data pada stack pada tumpukan paling atas </p><p> Pop() mengambil data pada stack pada tumpukan paling atas </p><p> Tampil() mencetak semua data dalam stack </p><p>Dalam implementasinya, stack dapat disajikan dengan menggunakan struktur data </p><p>statis maupun dinamis. Implementasi dengan struktur data statis pada percobaan ini </p><p>adalah dengan menggunakan array. </p><p>Berikut ini adalah cara deklarasi stack dengan menggunakan array: typedef struct STACK{ </p><p> int top; </p><p> char data[10][10]; //misalkan : data adalah array of string </p><p> //berjumlah 10 data, masing-masing string </p><p> //menampung maksimal 10 karakter </p><p>}; </p><p>STACK tumpuk; </p><p>Pada keadaan awal, stack diinisialisasi dengan fungsi inisialisasi() seperti berikut ini: void inisialisasi(){ </p><p> tumpuk.top = -1; </p><p>} </p><p>Elemen top dari stack diisi dengan nilai -1, karena array dalam C dimulai dari 0, yang </p><p>berarti stack adalah kosong. Top adalah suatu variabel penanda dalam STACK yang </p><p>menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak </p><p>hingga mencapai MAX_STACK (di sini, MAX_STACK adalah ukuran maksimum </p><p>stack) sehingga menyebabkan stack penuh. </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 16 </p><p>Untuk memeriksa apakah stack sudah penuh, digunakan fungsi IsFull(): int IsFull(){ </p><p> if(tumpuk.top == MAX_STACK-1) </p><p> return 1; </p><p> else </p><p> return 0; </p><p>} </p><p>Sementara itu, untuk memeriksa apakah stack kosong, dapat dibuat fungsi IsEmpty(): int IsEmpty(){ </p><p> if(tumpuk.top == -1) </p><p> return 1; </p><p> else </p><p> return 0; </p><p>} </p><p>Adapun fungsi Push() dan Pop() masing-masing diimplementasikan sebagai berikut: void Push(char d[10]){ </p><p> tumpuk.top++; </p><p> strcpy(tumpuk.data[tumpuk.top],d); </p><p>} </p><p> void Pop(){ </p><p> printf("Data yang terambil = %s\n",tumpuk.data[tumpuk.top]); </p><p> tumpuk.top--; </p><p>} </p><p>Untuk menampilkan seluruh data dari stack, maka digunakan perulangan. Karena </p><p>bersifat LIFO, maka data yang pertama ditampilkan adalah yang berada pada elemen </p><p>teratas (yaitu yang terakhir sekali disimpan di stack). Fungsi untuk menampilkan ini </p><p>dapat dibuat sebagai berikut: </p><p>void TampilStack(){ </p><p> for(int i=tumpuk.top;i&gt;=0;i--){ </p><p> printf("Data : %s\n",tumpuk.data[i]); </p><p> } </p><p>} </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 17 </p><p>PERCOBAAN </p><p>Berikut ini adalah contoh implementasi program menggunakan stack. Ketiklah </p><p>program berikut ini, kemudian lihat hasilnya, dan beri penjelasannya. </p><p> #include </p><p>#include </p><p>//deklarasi 'STACK' dengan struct dan array </p><p>struct STACK </p><p>{ </p><p> int data[5]; </p><p> int atas; </p><p>}; </p><p>//deklarasi variabel 'tumpuk' dari struct </p><p>STACK tumpuk; </p><p>void main() </p><p>{ </p><p> clrscr(); </p><p> int pilihan,baru,i; </p><p> //inisialisasi awal </p><p> tumpuk.atas=-1; </p><p> do </p><p> { </p><p> clrscr(); </p><p> printf("1.Push Data\n"); </p><p> printf("2.Pop Data\n"); </p><p> printf("3.Print Data\n"); </p><p> printf("\nPilihan = "); </p><p> scanf("%i",&amp;pilihan); </p><p> switch(pilihan) </p><p> { </p><p> case 1: </p><p> { </p><p> if(tumpuk.atas==5-1) </p><p> { </p><p> printf("Tumpukan penuh"); </p><p> getch(); </p><p> } </p><p> else </p><p> { </p><p> printf("Data yang akan di-push = "); </p><p> scanf("%d",&amp;baru); </p><p> tumpuk.atas++; </p><p> tumpuk.data[tumpuk.atas]=baru; </p><p> } </p><p> break; </p><p> } </p><p> case 2: </p><p> { </p><p> if(tumpuk.atas==-1) </p><p> { </p><p> printf("Tumpukan kosong"); </p><p> getch(); </p><p> } </p><p> else </p><p> { </p><p> printf("Data yang akan di-pop = %d", </p><p>tumpuk.data[tumpuk.atas]); </p><p> tumpuk.atas--; </p><p> getch(); </p><p> } </p><p> break; </p><p> } </p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 18 </p><p> case 3: </p><p> { </p><p> if(tumpuk.atas==-1) </p><p> { </p><p> printf("Tumpukan kosong"); </p><p> getch(); </p><p> } </p><p> else </p><p> { </p><p> printf("Data = "); </p><p> for(i=0; i=1 &amp;&amp; pilihan</p></li><li><p>Modul Praktikum Struktur Data </p><p>Prodi Manajemen Informatika - Polmed 19 </p><p>MODUL 4 </p><p>Pertemuan : VII dan VIII </p><p>Judul Modul : Queue dengan Array </p><p>Tujuan: </p><p> Memahami pengertian queue Dapat mengimplementasikan queue dengan menggunakan array </p><p>DASAR TEORI </p><p>Secara harfiah, queue berarti antrian. Dalam suatu antrian, yang datang lebih dahulu </p><p>akan dilayani dan akan keluar lebih dahulu. Karena itu, queue merupakan sebuah </p><p>struktur data yang...</p></li></ul>