Algoritma Pemrograman & Struktur Data

Ukuran: px
Mulai penontonan dengan halaman:

Download "Algoritma Pemrograman & Struktur Data"

Transkripsi

1 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 1 PENDAHULUAN Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang konsep dasar dari algoritma dan struktur data Kompetensi Mampu memahami konsep dasar dari algoritma dan struktur data

2 Pendahuluan Tipe dan Definisi Data DEFINISI DATA : ADALAH FAKTA ATAU KENYATAAN YANG TERCATAT MENGENAI SUATU OBYEK. Pengertian data ini menyiratkan suatu nilai yang bisa dinyatakan dalam bentuk konstanta atau variabel. Konstanta menyatakan nilai yang tetap Variabel digunakan dalam program untuk menyatakan nilai yang dapat diubah-ubah selama eksekusi berlangsung. ADA 4 ISTILAH TENTANG DATA YAITU : 1. Tipe Data : Macam / isi data di dalam suatu variable dalam bahasa program 2. Objek Data : Set dari elemen misal X set bilangan integer 3. Representasi Data : Suatu mapping dari struktur data d ke suatu set dari struktur data e misalnya Boolean direpresantasikan dalam 0 dan 1 4. Struktur Data : Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat setiap variabel dapat memiliki tipe yang berlainan. Struktur data biasa dipakai untuk mengelompokkan beberapa informasi yang berkaitan menjadi sebuah kesatuan HIRARKI DARI TIPE DATA : 2

3 TIPE DATA SEDERHANA Hanya dimungkinkan untuk meyimpan sebuah nilai data dalam sebuah variabel. Ada 5 macam : - Bil. Bulat ( integer ) - Bil. Real presisi-tunggal ( Float ) - Bil. Real presisi-ganda ( Double ) - Karakter - Tak bertipe/void (Tipe data untuk Fungsi) - Boolean ( Operator Logika ) TIPE TOTAL KAWASAN KETERANGAN BIT Char s/d 127 Karakter Int s/d Bil Integer Float E-38 s/d 3.4E+38 Bil real Presisi Tunggal Double E-308 s/d 1.7E+308 Bil Real Presisi Ganda Void 6 Tak bertipe TIPE DATA BOOLEAN Mempunyai 2 nilai : True dan False OPERATOR Maksud && Dan ( And ) Atau ( OR )! Tidak ( Not ) Operator Boolean biasa dipakai untuk menghubungkan ungkapan relasi Operand 1 Operand 2 Hasil && False False False False False True True False True False True False True True True True 3

4 TIPE DATA TERSTRUKTUR Adalah tipe dimana suatu variabel bisa menyimpan lebih dari sebuah nilai data. Masingmasing nilai data disebut komponen. Ada 5 macam : 1. Tipe String Data yang berisi sederetan karakater dimana banyaknya karakter bisa berubah-ubah sesuai dengan kebutuhan. Contoh Char Nama[30]; 2. Larik (Array ) Variabel hanya menyimpan 1 tipe data saja. Contoh Int A[10]; Float C[3][4]; 3. Record Terdiri dari beberapa variabel yang terstruktur dan masing-masing variabel bisa mempunyai tipe yang berbeda. Contoh : Struct Nama data_tanggal int tanggal; int bulan; int tahun ; 4. Set ( himpunan ) Union Memungkinkan suatu lokasi memori ditempati oleh dua atau lebih variabel yang tipenya bisa berlainan. Contoh : Union unsigned int Angka; unsigned char Huruf[12] bil_x Enumerasi Merupakan himpunan dari konstanta integer yang diberi nama. Contoh : enum manusia pria,wanita; enum manusia jns_kelamin; jika jns_kelamin diisi pria maka nilai jns_kelamin=0 dan sebaliknya jika wanita nilai=1 4

5 5. File Merupakan organisasi dari sejumlah record sejenis. Masing-masing record dapat terdiri dari satu atau beberapa field dan setiap field terdiri dari satu atau bebrapa karakter. TIPE DATA POINTER Variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek yang ditunjuk oleh pointer tersebut). Contoh int *pa; pa = &x; pointer pa menunjuk alamat x. Algoritma DEFINISI ALGORITMA : Adalah himpunan langkah-langkah instruksi untuk melaksanakan suatu pekerjaan tertentu, dengan beberapa kriteria : 1. Ada input 2. Ada output 3. Jelas dan tidak meragukan (definiteness) 4. Ada terminasi (finiteness) 5. Efektif dan dapat dilaksanakan. Ada sedikit perbedaan antara algoritma dan program. Program tidak harus memenuhi kriteria 4 contoh SO, karena harus selalu menunggu job. 5

6 Algoritma dan Metode Pemrograman Penekanannya pada bagaimana memecahkan suatu masalah dengan algoritma yang tepat. Dasar-dasar algoritma : - Statement Elementer - Statement Control Statement Elementer - Assignment - Comparison - Arithmetic Statement - Operator Boolean - Instruksi I/O Statement Control : - Alternatif - Pengulangan - Percabangan STATEMENT ELEMENTER : a. Assigment Untuk memberikan nilai kevariabel yang telah dideklarasikan, bentuk pernyataan yang digunakan : Contoh Bil3 = 0; b. Comparison U/ keperluan pengambilan keputusan diperlukan operator relasi sebagai berikut : Operator >, <, >=, <=, = =,!= c. Arithmetic Statement Operator Aritmatika : +, -, *, /, ^ Ada operator aritmatika khusus yaitu mod (%) sisa pembagian. Contoh 7 % 2 hasilnya 1 d. Operator Boolean Adalah operator logika dipakai untuk menghubungkan ungkapan relasi yang hasilnya True atau False Yaitu && (dan), (Or),! (not) 6

7 e. Operasi Input/Output U/ memasukkan data kekomputer dalam Bahasa C/C++ Sbb : printf(),cin(),scanf(), getch(), getche() U/ mengeluarkan data : printf(), puts(), putchar(),cout(). STATEMENT CONTROL a. Alternatif Terdiri dari pernyataan : - If, If - else, switch Bentuk umum : If ( kondisi ) pernyataan If ( kondisi ) pernyataan True else pernyataan False switch ( ekspresi ) case 1 : pernyataan 1 break; case n : pernyataan n break b. Pengulangan Pernyataan pengulangan terdiri dari : - do while - while - for do pernyataan while (kondisi) 7

8 while ( kondisi ) pernyataan for (ungkapan1;ungkapan2;ungkapan3) pernyataan c. Percabangan Memerlukan label sebagai identitas cabang. label : pernyataan goto label STRUKTUR DATA LINIER Struktur data linier adalah struktur data yang menggambarkan hubungan tentang elemenelemen yang berdekatan : Terdiri dari : ARRAY : a. Dimensi satu (vector matriks) b. Dimensi dua (matriks) c. Multi dimensi Aplikasi penggunaan array diantaranya : a. Stack (tumpukkan) b. Queue (antrian) c. Deque (antrian dengan 2 pintu ) 8

9 LINKED LIST (LIST BERKAIT) a. Linier Singly linked list b. Linier Doubly linked list c. Circular singly linked list d. Circular doubley linked list Aplikasi linked list pada struktur data linier diantaranya : a. Linked stack b. Linked Queue Sedangkan multi linked list banyak digunakan pada struktur data non-linier yaitu untuk representasi tree maupun graph. PENGELOLAAN MEMORI Dapat secara STATIS atau DINAMIS Secara STATIS Menempati lokasi memori yang tetap(fixed size), tidak dapat dikembangkan atau diciutkan. Misal : array Alamat memori menjadi kunci array Secara DINAMIS Menempati lokasi memori dimana dapat dikembangkan atau diciutkan sesuai dengan kebutuhan. Pengelolaan memori secara dinamis(dynamic address) ditunjukkan oleh pointer. 9

10 Latihan Soal Buatlah algoritma sebagai berikut : 1. Menampilkan deret Menampilkan deret Menampilkan deret Menampilkan deret bilangan prima Menampilkan deret DaftarPustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 10

11 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 2 ARRAY Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang konsep dari array satu dimensi hingga array multidimensi Kompetensi Mampu memahami konsep dasar dari array satu dimensi hingga array multidimensi

12 Array Definisi Array Array (larik) adalah tipe terstruktur yang terdiri dari sejumlah komponen-komponen dengan type yang sama. Banyaknya komponen dalam suatu larik adalah tetap dan lokasi dalam suatu larik ditunjukkan oleh suatu INDEKS. Yang penting dalam array adalah pengalamatan memori dan digunakan pengalamatan secara static. Karakteristik pemakaian Array : - Jumlah elemen array terbatas - Semua elemen array dapat diakses secara acak - Panjang elemen sama Dimensi Dalam bentuknya array dapat kita tinjau dari segi pengaturan struktur datanya dalam konteks dimensi sebagai berikut : Array 1 Dimensi List Vektor Array 2 Dimensi Tables Matriks (2 dimensi) Array 3 Dimensi Matriks 3 Dimensi Array Mulidimensi Pada prinsipnya secara teori jumlah dimensi suatu matriks tidak terbatas, yang membatasi adalah kemampuan hardware dan besarnya memori Array Satu Dimensi Suatu array dideklarasikan dengan : A[ ], setiap elemen terdiri dari 4 byte. Jika alamat elemen -3 ] = 1000 H ditanya : 2

13 A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. Alamat A[7] atau Jawab : Di ilustrasikan sebuah Array sebagai berikut: Setiap elemen 4 = 1000 H = 1004 H A. Jumlah Elemen = (Index atas - Index Bawah ) + 1 = ( 8 - (-3) ) + 1 = 12 Elemen B. Jumlah Byte = JumlahElemen * Jumlah Byte PerElemen = 12 * 4 = 48 Byte C. 7 ] = berpindah/bergerak = 7 - (-3) = 10 Elemen Setiap Elemen 4 Byte maka : 10 * 4 = 40 Byte 40 disini adalah dalam notasi 40 Decimal, dalam pengalamatan memori digunakan notasi Hexa Decimal. Maka 40 Decimal dirubah menjadi Hexa Decimal. 40 Decimal = 28 Hexa Decimal atau 28 H = 1000 H + 28 H = 1028 H 3

14 Pendeklarasian A[ ] adalah deklarasi yang ada pada bahasa program Pascal. Pada bahasa program C/C++ pendeklarasian sedikit berbeda tapi mempunyai maksud yang sama. Contoh A[8] Maka akan terbentuk Array 1 Dimensi sebanyak 8 tempat Dimana nomor index pertama pada bahasa C dimulai dari 0 (nol) Program C++ mengetahui alamat suatu data #include<iostream.h> #include<conio.h> main() int i,j,angka[5]; clrscr(); for(i=0; i<5; i++) cout <<"MASUKAN ANGKA ["<<i<<"]= "; cin>>angka[i]; for(i=0; i<5; i++) cout <<"ANGKA ["<<i<<"]= "<<ANGKA[i]<<" ADA DIALAMAT = "<<&ANGKA[i]<<endl; getch(); Array Dua Dimensi Representasi matriks dalam bentuk array dua dimensi dapat berupa : Ukuran baris perbaris ( Row Major Order) Ukuran Kolom perkolom ( Column Major Order) Matrik dalam pembahasan selanjutnya menggunakan M[Baris][Kolom] 4

15 Diketahui suatu Array dua dimensi yang dideklarasikan dengan A[ , ] Setiap elemen terdiri dari 4 Byte. Alamat elemen = 1000 H = 1000 H Ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. Alamat A[2,5] Jika penempatan memori menggunakan : C1. Row Major Order C2. Column Major Order Jawab. Di ilustrasikan sebuah Array sebagai = 1000 H A B C D E F 0 G H I J 1 M N O P K Q L R 2 S T U V W =?. Pada Array 2 Dimensi yang diilustrasikan diatas, urutan elemennya dalam memori jika megikuti cara : 5

16 ROW MAJOR ORDER (URUTAN YANG MENGUTAMAKAN/MENDAHULUKAN BARIS) ,3-1,4-1,5-1,6-1,7-1,8 0,3 0,4 2,3 2,4 2,5 2,6 2,7 2,8 A B C D E F G H.. S T U V W X Baris Ke-1 Baris Ke-2 Baris ke 4 Baris (-1) Baris (0) Baris = 1000 H Setiap pindah Satu Baris pindah 6 Elemen COLUMN MAJOR ORDER ( URUTAN YANG MENDAHULUKAN KOLOM) ,3 A G M S B H N T C. Q W F L R X kolom Ke-1 Kolom Ke-2 Kolom Ke 3 Kolom ke6 Kolom (3) Kolom (4) Kolom 5 Kolom = 1000 H Setiap pindah Satu Kolom pindah 4 Elemen 6

17 BILA DINYATAKAN DENGAN NOMOR URUT MAKA PENEMPATAN ELEMEN ARRAY : CARA ROW MAJOR ORDER CARA COLUMN MAJOR ORDER Catatan : Angka- Angka Didalam Elemen Bukan Isi elemen tapi merupakan nomor Urut elemen. Jawaban Soal ARRAY DUA DIMENSI A. Jumlah Elemen = Baris * Kolom A[ -1..2, ] = 4 * 6 = (-1)+1 (8-3)+1 = 4 Baris = 6 Kolom B. Jumlah Byte = 24 * 4 = 96 Byte 7

18 C1. Menentukan menggunakan ROW MAJOR = 1000 H A B C D E F 0 G H I J K L 1 M N O P Q R =? Dari Gambar Diatas terlihat bahwa bergerak dari elemen A[-1,3] ke elemen A[2,5] yaitu elemen ke 21 menurut ROW MAJOR ORDER perpindahannya sebanyak : 21 1 = 20 Elemen A T A U Terlihat dari Baris 1 ke baris 2 sebanyak 3 Baris Setiap Baris ada 6 Elemen, Jadi 3 * 6 = 18 Elemen Dari Kolom 3 Ke kolom 5 sebanyak 2 Kolom Jadi Total Perpindahan = = 20 Elemen Satu Elemen 4 Byte Pindah 20 * 4 = 80 Byte 80 Dec = 50 Hexa Dec. Atau tanpa melihat Gambar : A [Baris, Kolom ] Ditanya 2, 5 ] Diketahui -1, 3 ] Dikurang 3 2 Pindah 3 Baris = 3 * Banyak Elemen Per baris = 3 * 6 = 18 Pindah 2 Kolom = 2 2 Total Perpindahan = 20 Elemen 8

19 Dimana 1 Elemen 4 Byte Jadi 20 * 4 = 80 Byte ( Decimal ) 80 Decimal = 50 Hexa Decimal Jadi = 1000 H + 50 H = 1050 H C2. Menentukan menggunakan COLUMN MAJOR = 1000 H A B C D E F 0 G H I J K L 1 M N O P Q R =? Dari Gambar Diatas terlihat bahwa bergerak dari elemen A[-1,3] ke elemen A[2,5] yaitu elemen ke 12 menurut COLUMN MAJOR ORDER perpindahannya sebanyak : 12 1 = 11 Elemen A T A U Terlihat dari kolom 3 ke kolom 5 sebanyak 2 Kolom Setiap Kolom ada 4 Elemen, Jadi 2 * 4 = 8 Elemen Dari baris -1 Ke baris 2 sebanyak 3 baris Jadi Total Perpindahan = = 11 Elemen Satu Elemen 4 Byte Pindah 11 * 4 = 44 Byte= 44 Dec 44 Dec = 2C Hexa, 9

20 Atau tanpa melihat Gambar : A [Baris, Kolom ] Ditanya 2, 5 ] Diketahui -1, 3 ] Dikurang 3 2 Pindah 2 Kolom = 2 * Banyak Elemen Per Kolom = 2 * 4 = 8 Pindah 3 Baris = 3 3 Total Perpindahan = 11 Elemen Dimana 1 Elemen 4 Byte Jadi * 4 = 44 Byte ( Decimal ) 44 Dec. = 2C Hexa Dec.l Jadi = 1000 H + 2C H = 102C H Array Tiga Dimensi Suatu Array dideklarasikan A[ 2..4, , ], setiap elemen terdiri 4 byte. Alamat elemen 1000 H ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. C1. Menggunakan Row Major Order C2. Menggunakan Column Major Order JAWAB ilustrasi = 1000 H Blok 2 Blok 3 Blok =.? 10

21 Blok Baris Kolom (4 2 )+1 (2-(-1))+1 (8-3) Blok 4 Baris 6 Kolom A[ 2.. 4, , ] A. Jumlah Elemen: Jumlah Blok = ( 4-2 ) + 1 = 3 Blok Jumlah Baris = ( 2 (-1) + 1 = 4 Baris Jumlah Kolom = ( 8 3 ) + 1 = 6 Kolom Jumlah Elemen = 3 * 4 * 6 = 72 Elemen. B. Jumlah Byte : 72 * 4 Byte = 288 Byte. C1. ROW MAJOR = 1000 H BLOK 2 BLOK 3 BLOK =? Dari Gambar terlihat urutan perpindahan dari elemen no. 1 ke Elemen No. 69 perpindahan sebanyak 68 Elemen. 68 * 4 Byte =272 Byte Dec. = 110 Hexa Dec. Jika tidak melihat gambar dapat dihitung dengan melihat perpindahan Blok, Baris dan kolom. Ditanya 4, 2, 5 ] 2, -1, 3 ] Di kurang 11

22 2 3 2 Pindah 2 Blok ( Dari Blok 2 Ke Blok 4 ) Setiap Blok Ada 24 Elemen Jadi Perpindahan 2 * 24 = 48 Elemen Pindah 3 Baris ( Dari Baris -1 Ke baris 2 ) Setiap Baris ada 6 Elemen Jadi Perpindahan 3 * 6 = 18 Elemen Pindah 2 Kolom ( 2 Elemen ) = 2 Elemen Jadi Jumlah Pepindahan 68 Elemen Pindah = 68 Elemen = 68 * 4 Byte = 272 Byte (Decimal) = 110 Hexa Dec Jadi = 1000 H H = 1110 H C2. COLUMN MAJOR = 1000 H BLOK 2 BLOK 3 BLOK =? Dari Gambar terlihat urutan perpindahan dari elemen no. 1 ke Elemen No. 60 perpindahan sebanyak 59 Elemen. 59 * 4 Byte = 236 Byte 236 Dec. = EC Hexa Dec. 12

23 Jika tidak melihat gambar dapat dihitung dengan melihat perpindahan Blok, Baris dan kolom. Ditanya 4, 2, 5 ] 2, -1, 3 ] Di kurang Pindah 2 Blok ( Dari Blok 2 Ke Blok 4 ) Setiap Blok Ada 24 Elemen Jadi Perpindahan 2 * 24 = 48 Elemen Pindah 3 Baris ( Dari Baris -1 Ke baris 2 ) Pindah Sebanyak 3 Elemen = 3 Elemen Pindah 2 Kolom ( Dari Kolom 3 Ke Kolom 5) Setiap Kolom 4 Elemen Jadi Perpindahan 2 * 4 = 8 Elemen Jadi Jumlah Pepindahan Pindah = 59 Elemen = 59 * 4 Byte = 236 Byte (Decimal) = EC Hexa Dec 59 Elemen Jadi = 1000 H + EC H = 10EC H 13

24 Array Empat Dimensi (Multidimensi) Diketahui suatu Array Multi Dimensi yang dideklarasikan dengan A[1..2, 2..4, -1..2, 3..8 ]. Setiap elemen terdiri dari 4 Byte. Alamat elemen = 1000 H Ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. C1. Row Major Order C2. Column Major Order Jawab Grup Blok Baris Kolom (2 1)+1 (4-2)+1 (2-(-1)+1 (8-3)+1 2 Grup 3 Blok 4 Baris 6 Kolom A [ 1.. 2, 2.. 4, , ] ILUSTRASI GRUP Blok 2 Blok 3 Blok GRUP Blok 2 Blok 3 Blok 4 A. Jumlah Elemen = 2 Grup * 3 Blok * 4 Baris * 6 Kolom = 144 Elemen B. Jumlah Byte = 144 * 4 = 576 Byte 14

25 C1. ROW MAJOR ORDER GRUP Blok 2 Blok 3 Blok 4 GRUP Blok 2 Blok 3 Blok 4 C2. COLUMN MAJOR ORDER GRUP Blok 2 Blok 3 Blok GRUP Blok 2 Blok 3 Blok 4 15

26 Latihan Soal Latihan Array satu dimensi : 1. Suatu array dideklarasikan dengan : A[ ], setiap elemen terdiri dari 6 byte. Jika alamat elemen pertama FFBB H ditanya : a. Jumlah Elemen b. Jumlah Byte Seluruhnya c. Alamat A[4] atau 2. Suatu array dideklarasikan dengan : A[9] pada Bahasa C++, setiap elemen terdiri dari 8 byte. Jika alamat elemen pertama 16FF H ditanya : a. Jumlah Elemen b. Jumlah Byte Seluruhnya c. Alamat A[5] atau 3 Suatu array dideklarasikan pada bahasa C++ dengan : float angka[12]; Jika alamat elemen pertama 2C3E H ditanya : a. Jumlah Elemen b. Jumlah Byte Seluruhnya c. Alamat A[6] atau Latihan Array dua dimensi : 1. Diketahui suatu Array dua dimensi yang dideklarasikan dengan A[-2..3,3..6]. Setiap elemen terdiri dari 2 Byte. Alamat elemen pertama FECA H Ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. Alamat A[2,5] Jika penempatan memori menggunakan : C1. Row Major Order C2. Column Major Order 2. Diketahui suatu Array dua dimensi yang dideklarasikan dengan A[5][6] Pada Bahasa C++. Setiap elemen terdiri dari 10 Byte. Alamat elemen H Ditanya : A. Jumlah Elemen 16

27 B. Jumlah Byte Seluruhnya C. Alamat A[3,2] Jika penempatan memori menggunakan : C1. Row Major Order C2. Column Major Order 3. Diketahui suatu Array dua dimensi yang dideklarasikan dengan : long A[6][7] Pada Bahasa C. Alamat elemen pertama 10CC H Ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. Alamat A[2,5] Jika penempatan memori menggunakan : C1. Row Major Order C2. Column Major Order Latihan Array tiga dimensi : 1. Diketahui suatu Array 3 dimensi yang dideklarasikan dengan A[-2..2,1..4,3..6]. Setiap elemen terdiri dari 6 Byte. Alamat elemen pertama FC8B H Ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. Alamat A[1,3,5] C1. Row Major Order C2. Column Major Order 2. Diketahui suatu Array 3 dimensi yang dideklarasikan dengan A[2][5][6] Pada Bahasa C++.Setiap elemen terdiri dari 4 Byte. Alamat elemen pertama BC9A H Ditanya : A. Jumlah Elemen B. Jumlah Byte Seluruhnya C. Alamat A[1,3,5]? C1. Row Major Order C2. Column Major Order 3. Diketahui suatu Array 3 dimensi yang dideklarasikan dengan : longdouble A[4][3[7] Pada Bahasa C++. Alamat elemen pertama CBBA H Ditanya : A. Jumlah Elemen 17

28 B. Jumlah Byte Seluruhnya C. Alamat A[3,2,6]? C1. Row Major Order C2. Column Major Order Latihan Array empat dimensi (multidimensi) : 1. Diketahui Array Multi dimensi yang dideklarasikan dengan A[2..4,-1..4,3..6,1..6]. setiap elemen 8 Byte. Alamat elemen Pertama F2BE H. Ditanya A. Jumlah Elemen B. Jumlah Byte Seluruhnya C1. Row Major Order C2. Column Major Order 2. Diketahui Array Multi dimensi yang dideklarasikan dengan A[4][3][2][3] dengan Bhs. C. setiap elemen 4 Byte. Alamat elemen Pertama 2BCE H. Ditanya A. Jumlah Elemen B. Jumlah Byte Seluruhnya C1. Row Major Order C2. Column Major Order 3. Diketahui Array Multi dimensi yang dideklarasikan int A[5][2][6][8][3] dengan Bhs. C++. Alamat elemen Pertama 3CDE H. Ditanya A. Jumlah Elemen B. Jumlah Byte Seluruhnya C1. Row Major Order C2. Column Major Order 18

29 Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 19

30 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 3 LINKED LIST Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang konsep dari linked list dan penerapannya Kompetensi Mampu memahami konsep dasar dari dari linked list dan penerapannya

31 Linier Singly Linked List Linier Singly Linked List - Pengelolaan memory secara dinamis artinya tidak perlu mengalokasikan memori lebih awal secara tetap (fixed). - Satu elemen terdiri dari 2 elemen : a. Elemen yang menyimpan data b. Elemen yang menyimpan alamat record ILLUSTRASI FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK ( 1 ) ( 2) ( 3 ) ( 4 ) Keterangan dari ilustrasi Linked List : - Ada 4 Simpul : simpul 1 s/d simpul 4 - Setiap simpul(record) terdiri 2 elemen yaitu : Field INFO misal bertipe Integer Field LINK bertipe Pointer Contoh simpul no. 1 Field INFO berisi nilai 25 Field LINK berisi alamat record no. 2 Simpul No. 3 Field INFO berisi nilai 17 Field LINK berisi alamat record no. 4 FIRST dan LAST adalah pointer Proses yang dapat dilakukan : a. Pembuatan Simpul Awal 2

32 b. Insert kanan (akhir) c. Delete Kanan d. Insert Tengah e. Insert Kiri f. Delete Kiri g. Delete Tengah ILUSTRASI SEBUAH SIMPUL (RECORD) INFO LINK Nama Field : LINK Tipe : Pointer Isi : akan diisi alamat Record Berikutnya Nama Field Tipe Isi : INFO : Integer : akan diisi data Dalam bahasa C/C++ untuk memberitahukan komputer bahwa kita memerlukan suatu simpul atau record dengan tipe struktur diatas perlu ditulis instruksi-instruksi sebagai berikut: Struct SIMPUL int INFO; struct SIMPUL *LINK; ; struct SIMPUL *P, *FIRST, *LAST; disiapkan 3 buah pointer yaitu P, FIRST, LAST yang semuanya terkait dengan simpul atau record. 3

33 a. Pembuatan Simpul Awal Instruksi untuk membuat sebuah simpul (record) baru adalah : P=(struct SIMPUL*) malloc(sizeof(struct SIMPUL*)); Malloc : Maksudnya mengalokasikan memory Sebesar atau seukuran (sizeof) yang diperlukan Untuk simpul. Contoh sederhana (lengkap) program membuat Simpul Awal: #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> struct SIMPUL int INFO; struct SIMPUL *LINK; ; struct SIMPUL *P, *FIRST, *LAST; main( ) int X; clrscr(); cout<<"masukan SIMPUL AWAL : "; cin>>x; P=(struct SIMPUL*)malloc(sizeof(struct SIMPUL)); P->INFO=X; P->LINK=NULL; cout<<" ANGKA YANG DIMASUKKAN = "<<P->INFO<<endl; getch(); 4

34 Perhatikan kembali Linier Singly Lingked List FIRST LAST INFO LINK INFO LINK INFO LINK INFO LINK ( 1 ) ( 2) ( 3 ) ( 4 ) Fungsi untuk membuat simpul(record) AWAL void AWAL(void) int X; cout<< MASUKKAN SIMPUL AWAL : ; cin>>x; P=(struct SIMPUL*) malloc(sizeof(struct SIMPUL*)); P->INFO=X; FIRST = P; LAST=P; P->LINK=NULL; b. INSERT KANAN (INSERT AKHIR) sudah dibuat Simpul awal sebagai berikut : FIRST LAST P INFO LINK 25 ( 1 ) 5

35 Akan diinsert disebelah kanan seperti berikut FIRST LAST INFO LINK INFO LINK ( 1 ) ( 2) Fungsi untuk Insert Kanan sebagai berikut : void InsertKanan(void) int X; cout<< MASUKKAN SIMPUL KANAN : ; cin>>x; P=(struct SIMPUL*) malloc(sizeof(struct SIMPUL*)); P->INFO=X; LAST->LINK=P; LAST=P; P->LINK=NULL; c. DELETE KANAN Misal sudah ada Linked List sebagai berikut: FIRST Q LAST INFO LINK INFO LINK INFO LINK INFO LINK ( 1 ) ( 2) ( 3 ) ( 4 ) Fungsi untuk Delete Kanan sebagai berikut : 6

36 void DeleteKanan(void) int X; X=LAST->INFO; cout<< DATA YANG AKAN TERHAPUS <<X; free(last); LAST=Q; LAST->LINK=NULL; Buat Fungsi : a. Insert Tengah b. Insert Kiri c. Delete Kiri d. Delete Tengah Linier Doubly Linked List - Pengelolaan memory secara dinamis artinya tidak perlu mengalokasikan memori lebih awal secara tetap (fixed). - Satu elemen terdiri dari 2 elemen : a. Elemen yang menyimpan data b. Elemen yang menyimpan alamat record sebelumnya c. Elemen yang menyimpan alamat record sesudahnya ILUSTRASI FIRST LEFT INFO RIGHT LAST

37 ILUSTRASI SEBUAH SIMPUL Simpul dengan 3 Elemen LEFT INFO RIGHT Nama Field : LEFT Nama Field : INFO Nama Field : RIGHT Type : Pointer Type : integer Type : Pointer Isi : Akan diisi alamat Isi : akan diisi data Isi : akan diisi alamat Record sebelumnya Record sesudanya Dalam Bahasa C++ untuk menyatakan suatu simpul dengan struktur demikian dapat ditulis sebagai berikut : Struct SIMPUL int INFO; struct SIMPUL *LEFT, *RIGHT; ; struct SIMPUL *P, *FIRST, *LAST; Proses yang dapat dilakukan : a. Pembuatan Simpul Awal b. Insert kanan (akhir) c. Delete Kanan d. Insert Tengah e. Insert Kiri f. Delete Kiri g. Delete Tengah a. Pembuatan Simpul Awal Contoh sederhana (lengkap) program membuat Simpul awal: #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> 8

38 struct SIMPUL int INFO; struct SIMPUL *LEFT,*RIGHT; ; struct SIMPUL *P, *FIRST, *LAST; main( ) int X; clrscr(); cout<<"masukan SIMPUL AWAL : "; cin>>x; P=(struct SIMPUL*)malloc(sizeof(struct SIMPUL)); P->INFO=X; FIRST=P; LAST=P; P->LEFT=NULL; P->RIGHT=NULL; cout<<" Isi P = "<<P->INFO; Fungsi untuk membuat Simpul Awal void AWAL(void) int X; cout<< MASUKKAN SIMPUL AWAL : cin>>x; P=(struct SIMPUL*) malloc(sizeof(struct SIMPUL*)); P->INFO=X; FIRST=P; LAST=P; P->LEFT=NULL; P->RIGHT=NULL; 9

39 Ilustrasi simpul yang dihasilkan oleh program misal X=25 LAST FIRST P LEFT INFO RIGHT 25 Ada 3 buah pointer yang LAST, FIRST dan P yang menunjuk data yang sama. b. Insert Kanan Dibuat Simpul Awal sebagai berikut : LAST FIRST P LEFT INFO RIGHT 25 (1) Akan dibuat simpul baru disebelah kanan sebagai berikut FIRST LAST LEFT INFO RIGHT (1) (2) 10

40 Fungsi untuk Insert Kanan Sebagai Berikut : void InsertKanan(void) int X; cout<< MASUKKAN SIMPUL KANAN ; cin>>x; P=(struct SIMPUL*) malloc(sizeof(struct SIMPUL*)); P->INFO=X; LAST->RIGHT=P; P->LEFT=LAST; LAST=P; P->RIGHT=NULL; c. Delete Kanan (Akhir) Sudah ada Double Linked List sebagai berikut : FIRST LEFT INFO RIGHT LAST Akan dihapus simpul yang paling kanan (4) menjadi sebagai berikut: FIRST LEFT INFO RIGHT LAST Pointer LAST akan menunjuk Ke Record Ke 3 11

41 Fungsi untuk Delete Kanan Sebagai Berikut : void DeleteKanan(void) int X; X=LAST->INFO; cout<< DATA YANG TERHAPUS <<X; LAST=LAST->LEFT; free(last->right) LAST->RIGHT=NULL; Buat Fungsi : a. Insert Tengah b. Insert Kiri c. Delete Kiri d. Delete Tengah Praktikum PRAKTEK DI LABORATORIUM DISAJIKAN SEBUAH PROGRAM LINIER SINGLE LINKED LIST /*PROGRAM LINIER SINGLY LINKED LIST */ #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> struct SIMPUL int INFO; struct SIMPUL *LINK; ; struct SIMPUL *P, *FIRST, *LAST, *T, *Q; void AWAL(void); void TAMPIL(void); void INSERT_KANAN(void); 12

42 void INSERT_KIRI(void); void INSERT_TENGAH(void); void DELETE_KIRI(void); void DELETE_KANAN(void); void DELETE_TENGAH(void); void COBA(void); int X,PIL; main( ) do clrscr(); cout<<"linier SINGLY LIST"<<endl; cout<<"======================"<<endl; cout<<"1. SIMPUL AWAL"<<endl; cout<<"2. INSERT KANAN"<<endl; cout<<"3. INSERT KIRI"<<endl; cout<<"4. INSERT TENGAH"<<endl; cout<<"5. DELETE KANAN"<<endl; cout<<"6. DELETE KIRI"<<endl; cout<<"7. DELETE TENGAH"<<endl; cout<<"8. TAMPIL "<<endl; cout<<"9. Exit"<<endl<<endl; while (PIL<9); void AWAL(void) cout<<"pilihan : "; cin>>pil; switch (PIL) case 1 : AWAL(); break; case 2 : INSERT_KANAN(); break; /* case 3 : INSERT_KIRI(); break; case 4 : INSERT_TENGAH(); break; */ case 5 : DELETE_KANAN(); break; /* case 6 : DELETE_KIRI(); break; case 7 : DELETE_TENGAH(); break; */ case 8 : TAMPIL(); break; case 9 : cout<<"terima KASIH"; break; getch(); 13

43 clrscr(); cout<<"masukan SIMPUL AWAL : "; cin>>x; P=(struct SIMPUL*)malloc(sizeof(struct SIMPUL)); P->INFO=X; P->LINK=NULL; FIRST=P; LAST=P; cout<<"isi P = "<<P->INFO<<endl; cout<<"isi FIRST = "<<FIRST->INFO<<endl; cout<<"isi LAST = "<<LAST->INFO<<endl; cout<<"isi pointer P = "<<P->LINK<<endl; cout<<"isi pointer FIRST = "<<FIRST->LINK<<endl; cout<<"isi pointer LAST = "<<LAST->LINK<<endl; void INSERT_KANAN(void) clrscr(); cout<<"masukan SIMPUL KANAN : "; cin>>x; P=(struct SIMPUL*)malloc(sizeof(struct SIMPUL)); P->INFO=X; LAST->LINK=P; LAST=P; P->LINK=NULL; cout<<" Isi P = "<<P->INFO; void DELETE_KANAN(void) clrscr(); if (FIRST!=NULL) P=FIRST; while(p->link!=null) Q=P; P=P->LINK; else X=P->INFO; cout<<"data YANG AKAN DIHAPUS : "<<X; free(p); Q->LINK=NULL; LAST=Q; cout<<" SIMPUL KOSONG"; 14

44 void TAMPIL(void) clrscr(); T=FIRST; while (T!=NULL) X=T->INFO; cout<<x<<" "; T=T->LINK; Buat procedure/fungsi untuk : 1. Insert Kiri 2. Insert Tengah 3. Delete Kiri 4. Delete Tengah Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 15

45 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 4 STACK (TUMPUKAN) Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang konsep dari queue (antrian) dan penerapannya Kompetensi Mampu memahami konsep dasar dari queue (antrian) dan penerapannya

46 STACK (TUMPUKAN) Konsep Stack Aplikasi penggunaan array berupa : Stack ( tumpukan ), Queue ( antrian ) dan Dequeue ( antrian 2 Arah ) Stack maksudnya tumpukan Salah satu Ilustrasi Stack yang mudah dipahami misalnya tumpukan buku diatas meja yang diilustrasikan sebagai berikut : Nomor Nomor Urut Urut Masuk Keluar ( Push ) ( Pop ) 4 Buku 4 1 Top 3 Buku Buku 2 3 Meja 1 Buku 1 4 Dasar Proses yang dapat dilakukan terhadap Stack PUSH untuk : - Penempatan atau - Masuk, atau - Insert, atau - Tulis POP untuk : - Ambil atau - Keluar, atau - Delete, atau - Baca/ Hapus 2

47 Mempunyai Prinsip : LIFO (LAST IN FIRST OUT ) : terakhir masuk, pertama keluar Atau Data masuk terakhir akan diambil pertama kali. Stack I Satu Stack dalam satu array. (array hanya digunakan oleh satu stack) Dasar Stack berada pada sisi index terkecil. Ilustrasi misal n = n S[ ] Dasar Top Dasar Top X a. Stack menggunakan array S[ ] dengan 10 elemen ( n=10) Isi Stack ada 4 Elemen. S[1] yang paling bawah dan S[4] yang paling atas Ada dua index ( baca Pointer ) yang digunakan yaitu dasar dan Top Dasar : Untuk menunjuk dasar atau alas dari stack, isinya dalam hal ini selalu 0 Top : untuk menunjuk nomor elemen array yang menampung isi stack yang paling atas. Dalam ilustrasi diatas isinya adalah 4 3

48 b. Beberapa Kondisi Stack. Ditentukan oleh posisi Pointer Top 1. Stack kosong tak ada Isinya (awal) n S[ ].. Dasar Top STACK dalam kondisi : Kosong Top = 0 Bisa Diisi Top<n 2. Stack penuh tak bisa diisi S[ ] X X X X X X X X Dasar Top STACK dalam kondisi : Penuh Top = n Ada isinya Top>0 3. Stack bisa diisi n S[ ] X X X X.... Dasar Top STACK dalam kondisi : Bisa diisi Top < n Ada isinya Top > 0 4

49 KONDISI STACK CIRI 1 KOSONG, tak ada isinya Top = 0 2 PENUH, tak bisa di isi Top = n 3 BISA DI ISI, (kebalikan penuh) Top < n 4 ADA ISINYA (kebalikan kosong) Top > 0 c. Proses a. AWAL ( Inisialisasi) b. PUSH ( Simpan, insert,tulis ) c. POP (Ambil, Delete, Baca ) Algoritma Proses Awal Stack (Bhs. C++) Dimana semua pointer Dasar dan Top dimulai dari 0 void Awal(void) dasar = 0; Top = 0; Algoritma dasar proses Push (simpan) - Naikkan Top dengan 1 - Isikan data kedalam elemen yang ditunjuk Top void Push(void) Top = Top + 1; S[Top] = X; Algoritma Lengkap proses Push (simpan) - Periksa dahulu apakah Top<n - Naikkan Top dengan 1 - Isikan data kedalam elemen yang ditunjuk Top - Jika Sudah penuh cetak Stack Penuh Boy 5

50 void Push(void) if ( Top<n ) Top = Top + 1; S[Top] = X; else cout<< Stack Penuh Boy ; Algoritma dasar proses Pop (ambil) - Copy data dari elemen yang ditunjuk Top kedalam suatu Variabel - Turunkan Top void Pop(void) X = S[Top]; Top = Top 1 ; Algoritma Lengkap proses Pop (Ambil) - Periksa dahulu apakah Top void Push(void) if ( ) else 6

51 Stack II Dua Stack dalam satu array. Satu array digunakan oleh dua stack Dimana Dasar Stack1 berada pada sisi index terkecil dan Dasar Stack2 berada Pada sisi index terbesar. Ilustrasi n = 12 S[ ] a a a a b B b b Dasar1 Top1 Top2 Dasar Dasar1 Top1 Dasar2 Top2 Dasar1 selalu = 0 Dasar2 selalu = n+1 Untuk Ilustrasi diatas Dasar2 selalu = 13 a. Beberapa Kondisi Stack. 1. Stack kosong tak ada Isinya (awal) n S[ ] Dasar1 Top1 Dasar2 Top2 Kondisi Awal : - Stack 1 Kosong dan bisa di isi - Stack 2 Kosong dan bisa di isi 7

52 Cirinya : Dasar1 =0, Top1=0 Dasar2 = n + 1, Top2 = n Stack1 dan Stack2 ada Isinya S[ ] a a a a b b b Dasar1 Top1 Top2 Dasar 2 Stack1 ada isinya dan bisa di isi Stack2 ada isinya dan bisa di isi Cirinya : Dasar1 = 0, Dasar2= n + 1 Masih bisa diisi Top2 Top1 >1 3. Stack Penuh a a a a a a b b b b b S[ ] Dasar1 Top1 Top2 Dasar 2 Stack1 dan Stack2 Tak bisa di isi Cirinya : Top2 Top1 = 1 4 Stack Penuh a a a a a a a a a a a S[ ] n Dasar1 Top1 Top2 Dasar 2 8

53 Stack1 ada isinya Stack2 tak ada isinya Cirinya : Top1 = n Dasar2= n + 1, Top2 = n + 1 KONDISI STACK CIRI 1 STACK1 KOSONG STACK2 KOSNG Top1= 0 Top2 = n +1 2 STACK1 DAN STACK 2 PENUH Top2 Top1 =1 3 STACK1 DAN STACK2 BISA DIISI Top2 Top1 > 1 4 STACK1 ADA ISINYA STACK2 ADA ISINYA Top1 > 0 Top2 < n + 1 b. Proses - Awal (Inisialisasi) - Push1 - Pop1 - Push2 - Pop2 Algoritma Proses Awal Stack( Bhs. C ) void Awal(void) Dasar1 = 0; Top1 = 0; Dasar2 = n + 1; Top2 = n +1 Algoritma dasar proses Push1 (simpan) - Naikkan Top dengan 1 - Isikan data kedalam elemen yang ditunjuk Top void Push1(void) Top1 = Top1 + 1; S[Top1] = X; 9

54 Algoritma Lengkap proses Push1 (simpan) - Periksa dahulu apakah Top2-Top1>1 - Naikkan Top dengan 1 - Isikan data kedalam elemen yang ditunjuk Top - Jika Sudah penuh cetak Stack Penuh Boy void Push1(void) if ( Top2-Top1>1 ) Top1 = Top1 + 1; S[Top1] = X; else printf( Stack Penuh Boy ) Algoritma dasar proses Pop1(ambil) - Copy data dari elemen yang ditunjuk Top1 kedalam suatu Variabel - Turunkan Top1 void Pop1(void) X = S[Top1]; Top1 = Top1 1 ; Algoritma Lengkap proses Pop1 (Ambil) - Periksa dahulu apakah Top void Push1(void) if ( ) else 10

55 Buat Procedure untuk Push2 dan Pop2 Stack III Dua Stack dalam satu array. Satu array digunakan oleh dua stack Dimana Dasar kedua Stack berada ditengah. Ilustrasi n = 13 S[ ] a a a a B b b b Top1 Dasar2 Dasar 1 Top Dasar1 Top1 Dasar2 Top2 Dasar1 selalu = div(n,2) +1 Dasar2 selalu = div(n,2) Contoh fungsi div : div(15,3) -- hasilnya 5 div(16,3) -- hasilnya 5 div(17,3) -- hasilnya 5 11

56 a. Beberapa kondisi Stack 1. Kondisi Awal n = S[ ] Top2 Dasar2 Ciri : Dasar1 = div(n,2) + 1 Top1 = div(n,2) + 1 Dasar2 = div(n,2) Top2 = div(n,2) Stack1 masih bisa di isi Top1>1 Stack2 masih bis diisi Top2 < n Dasar1 Top1 2. Stack ada isinya n = 13 S[ ] a a a a b b b b Top1 Dasar2 Dasar 1 Top2 Cirinya Stack1 masih bisa di isi Top1>1 Stack2 masih bis diisi Top2 < n 12

57 3. Stack penuh n = 13 S[ ] a a a a a a b b b b b b b Top1 Dasar2 Dasar 1 Top2 Stack1 dan Stack2 penuh Cirinya Top1 = 1 Top2 = n KONDISI STACK 1 STACK1 KOSONG STACK2 KOSNG 2 STACK1 PENUH STACK 2 PENUH 3 STACK1 BISA DIISI STACK2 BISA DIISI 4 STACK1 ADA ISINYA STACK2 ADA ISINYA CIRI Top1= div(n,2) +1 Top2= div(n,2) Top1 = 1 Top2 = n Top1 > 1 Top2 < n Top1< div(n,2) + 1 Top2 > div(n,2) b. Proses - Awal (Inisialisasi) - Push1 - Pop1 - Push2 - Pop2 Buat Procedure dalam Bhs C++ - Awal (Inisialisasi) - Push1 - Pop1 - Push2 - Pop2 13

58 Praktikum Anda diminta untuk membuat suatu program animasi stack dengan 4 buah pilihan : push, pop, cetak stack, quit Jika dipilih push maka program akan meminta user untuk menginput sebuah character yang akan dimasukkan kesebuah wadah. Jika dipilih pop maka character teratas akan dikeluarkan dari wadah. Jika dipilih cetak stack maka komputer akan menampilkan character yang ada pada wadah. Jika dipilih quit maka program keluar. LAYOUT ANIMASI STACK 1. PUSH 2. POP 3. CETAK STACK 4. QUIT PILIH 1 4 : 1 Masukkan sebuah huruf : B M E R C U 14

59 Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 15

60 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 5 QUEUE (ANTRIAN) Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang konsep dari queue (antrian) dan penerapannya Kompetensi Mampu memahami konsep dasar dari queue (antrian) dan penerapannya

61 QUEUE (ANTRIAN) Bentuk Antrian Ada 3 Bentuk Queue yang akan dibahas : 1. Linier Queue 2. Circuler Queue 3. Double Ended Queue Mengunakan array satu dimensi Antrian Lurus (Linier Queue) Prinsip : FIFO ( FIRST IN FIRST OUT ) FCFS ( FIRST COME FIRST SERVE ) Yang lebih awal masuk akan dilayani terlebih dahulu ILUSTRASI misal n = 10 n Q[ ] X X X F R Menggunakan Pointer F dan R F ( Front ) untuk awal antrian R ( Rear ) untuk akhir antrian Untuk pengambilan data (keluar data) menggunakan Pointer F Untuk pemasukan data menggunakan pointer R Syarat F <= R 2

62 Dari ilustrasi diatas : R = 5, artinya pernah masuk 5 pengantri yang menempati 5 elemen dengan urutan masuk mulai Q[1], Q[2],.. Jadi yang terkahir masuk sekarang berada di Q[5] F = 2, artinya sudah keluar(sudah dilayani) sebanyak 2 pengantri dengan urutan keluar atau dilayani mulai dari Q[1], Q[2] jadi yang terakhir keluar adalah yang berada di Q[2] a. Kondisi Antrian 1. Kondisi Awal (belum ada yang ngantri) misal n = n Q[ ] F = R = 0 Kondisi awal F = R antrian Kosong F R R< n antrian bisa di isi 2. Masuk 4 Pengantri/Belum ada yang keluar misal n = n X X X X Q[ ] F = 0 Belum ada yang keluar F < R antrian ada isinya F R R< n antrian bisa di isi 3 Misal Keluar/dilayani 3 pengantri dan belum ada yang masuk misal n = n Q[ ] X F = 3 Sudak keluar 3 F < R antrian ada isinya F R R< n antrian bisa di isi 3

63 4. Misal masuk lagi 2 Pengantri misal n = n X X X Q[ ] F R F<R antrian ada isinya R< n antrian bisa di isi 5. Misal sesudah itu keluar 3 (semua) pengantri misal n = n Q[ ] F = R antrian KOSONG R < n antrian bisa di isi F R 6. Misal masuk lagi 4 Pengantri misal n = n X X X X Q[ ] F < R antrian ADA ISINYA R = n antrian Penuh F R 7. Misal Keluar/dilayani 4 (Semua ) Pengantri misal n = 10 Q[ ] n F = R antrian Kosong R = n antrian Penuh F R F = R = n Antrian kosong tidak ada isinya 4

64 Dapat juga disebut penuh karena tak bisa di isi Untuk keadaan ini perlu dilakukan RESET yaitu : Mengembalikan pointer keposisi awal F=0 dan R=0 8. Kondisi Penuh sesungguhnya misal n = n X X X X X X X X X X Q[ ] F R F = 0 Belum ada yang dilayani R = n antrian Penuh KONDISI ANTRIAN CIRI 1 KOSONG F = R dimana saja 2 PENUH R = n 3 BISA DI ISI R < n 4 ADA ISINYA F < n 5 PERLU DI RESET F = R = n b. Proses yang dapat dilakukan a. AWAL (Inisialisasi) b. INSERT ( Sisip, Masuk, Simpan, ngantri) c. DELETE (Hapus, Keluar, Ambil, dilayani) d. RESET ( Kembali Keadaan Awal) Untuk Proses INSERT menggunakan Pointer R ( Rear ) Untuk Proses DELETE menggunakan Pointer F ( Front ) 5

65 ALGORITMA DASAR PROSES AWAL (INISIALISASI) Dimana Pointer F dan R bernilai 0 void AWAL(void) F = 0; R = 0; ALGORITMA DASAR PROSES INSERT (MASUK) - Pointer R maju 1 langkah - Kemudian Isikan data kedalam elemen yang ditunjuk oleh R void INSERT(void) R = R +1 ; Q[R]=X; ALGORITMA DASAR PROSES DELETE (HAPUS) - Pointer F maju 1 langkah - Kemudian Copy data dari Elemen yang ditunjuk oleh F ke suatu Variabel. void DELETE(void) F = F + 1 ; X =Q[F]; A. BUAT PROC. LENGKAP UNTUK PROC. INSERT DAN DELETE B. BUAT PROC. INSERT DAN DELETE YANG MENGGUNAKAN PROC. RESET. 6

66 CIRCULAR QUEUE ( Antrian Melingkar ) ILUSTRASI n Q[ ] X X X X F R F = Front (Depan) R = Rear (Belakang) Arah antrian tetap sama dengan antrian biasa, hanya saja setelah sampai ke elemen ke-n akan kembali ke elemen 1 tanpa harus di RESET. Karena melingkar maka F dan R dapat saling menyusul : F TIDAK SELALU <= R a. Proses yang dapat dilakukan : a. AWAL (Inisialisasi) b. INSERT (Masuk, Simpan, Tulis) c. DELETE (Hapus, Keluar, ambil, Baca) b. Beberapa Kondisi Antrian 1. Keadaan AWAL Q[ ] n F R Flag = 0 7

67 KONDISI ARTINYA 1 F = R dan Flag = 0 Kosong, Bisa di isi 2 Atau cukup Flag = 0 Kosong Bisa di isi Flag artinya tidak ada data Flag artinya ada datanya 2. Masuk 1 Pengantri Q[ ] X n Flag = 1 R F KONDISI ARTINYA 1 F!= R Ada isinya 2 Flag = 1 Ada isinya 3 F!= R Bisa di isi Catatan :!= (Tidak sama dengan) 3. Masuk Lagi 3 Pengantri Q[ ] n X X X X R F Flag = 1 KONDISI ARTINYA 1 F!= R Ada isinya 2 Flag = 1 Ada isinya 3 F!= R Bisa di isi 8

68 4. Keluar 1 Pengantri Q[ ] n X X X Flag = 1 F R KONDISI ARTINYA 1 F!= R Ada isinya 2 Flag = 1 Ada isinya 3 F!= R Bisa di isi 5. Keluar 3 ( Semua ) Pengantri Q[ ] n Flag = 0 F R KONDISI ARTINYA 1 F = R and Flag = 0 Kosong 2 Flag = 0 Kosong 3 Flag = 0 Bisa di isi Jika yang didelete elemen yang ditunjuk oleh R maka Flag langsung dibuat = 0; 6. Kemudian masuk 8 Pengantri Q[ ] n X X X X X X X X Flag = 1 R F Terlihat R berada disebeleh kiri F 9

69 KONDISI ARTINYA 1 F!= R Ada isinya 2 Flag = 1 Ada isinya 3 F!= R Bisa di isi 7. Masuk Lagi 2 Pengantri Q[ ] n X X X X X X X X X X Flag = 1 R F KONDISI ARTINYA 1 F = R DAN Flag = 1 Penuh, Ada isinya 2 Flag = 1 Ada isinya KONDISI ANTRIAN CIRI 1 KOSONG F = R dan Flag = 0 Atau cukup dengan Flag = 0 2 PENUH F = R dan Flag = 1 3 BISA DI ISI F!= R atau Flag = 0 4 ADA ISINYA F!=R atau Flag = 1 Atau cukup Flag = 1 ALGORITMA PROSES AWAL Pointer F dan R berada di n dan Flag=0 (tak ada isinya) void AWAL(void) F = n; R = n; Flag = 0; Untuk Proses INSERT menggunakan Pointer R ( Rear ) Untuk Proses DELETE menggunakan Pointer F ( Front ) 10

70 Algoritma Dasar Proses Insert - R maju 1 Langkah - Kemudian Isikan data kedalam elemen yang ditunjuk oleh R - Isi Flag dengan 1 void INSERT(void) R = fmod(r,n) + 1; Q[R] = X; Flag =1 R = fmod(r,n) + 1, maksudnya : R maju satu langkah, dengan ketentuan jika R berada pada posisi di n maka setelah maju satu langkah akan menjadi R = 1 Fungsi fmod( ) dalam bhs C. adalah untuk mencari nilai sisa dari pembagian. Contoh : fmod(10,3) hasilnya 1 fmod(3,10) hasilnya 3 fmod(10,10) ---- hasilnya 0 fmod(2,10) hasilnya 2 Algoritma Dasar Proses Delete - F maju 1 Langkah - Kemudian Copy data dari Elemen yang ditunjuk oleh F ke suatu Variabel. - Isi Flag dengan 0 void DELETE(void) F = fmod(f,n) + 1; X = Q[F]; If F=R Flag =0; BUAT PROC. LENGKAP UNTUK PROC. INSERT DAN DELETE 11

71 DOUBLE ENDED QUEUE ( DEQUE ) Antrian dengan ujung ganda ILUSTRASI n Insert Kiri insert Kanan D[ ] Delete Kiri Delete Kanan L R - Pengantri dapat masuk dari pintu kanan atau kiri - Yang masuk dari pintu kiri, dapat keluar dari pintu kiri atau keluar dari pintu kanan tergantung kesempatan yang ada. - Yang masuk dari pintu kanan dapat keluar dari pintu kanan atau keluar dari pintu kiri tergantung dari kesempatan yang ada. Pointer yang digunakan: L = LEFT (Kiri) digunakan untuk insert dan delete kiri R = Right(kanan) digunakan untuk insert dan delete kanan PROSES YANG DAPAT DILAKUKAN - Insert Kiri : Masuk dari pintu kiri - Insert Kanan : Masuk dari pintu kanan - Delete kiri : Keluar dari pintu kiri - Delete kanan : Keluar dari pintu kanan Syarat : L tidak boleh mendahului R L <= R Prinsip : Bukan FIFO bukan juga LIFO, tetapi keluar dan masuk dari kedua ujungnya sesuai dengan kesempatan yang ada. 12

72 a. Beberapa Kondisi Antrian 1. Keadaan AWAL (Inisial) D[ ] n L R Insert Kanan L=R=0 Pada Kondisi ini hanya bisa insert kanan 2. Insert Kanan Sebanyak 3 elemen n D[ ] X X X L Delete kiri R Insert Kanan delete kanan Pada Kondisi ini : L = 0 (dianggap penuh kiri) R = 3, - tidak bisa insert kiri, - hanya bisa Delete kiri, insert kanan dan delete kanan 3. Delete Kiri 2 elemen n D[ ] X L R Insert Kiri Insert kanan 13

73 Pada Kondisi ini : L = 2 R = 3 : - Bisa insert kiri dan insert kanan - Bisa delete kiri dan delete kanan 4. Insert Kanan sebanyak n n D[ ] X X X X X X X X L R Pada Kondisi ini : L = 2 R = n (Penuh Kanan) - tak bisa insert kanan 5. Insert Kiri sebanyak 2 elemen n D[ ] X X X X X X X X X X L R Pada Kondisi ini : L = 0 (Penuh kiri) R = n (Penuh Kanan) - tak bisa insert kiri dan kanan 6. Delete kanan sampai R = n D[ ] X X X X L R Pada Kondisi ini : 14

74 L = 0 (Penuh kiri) R = 4 (Penuh Kanan) - tak bisa insert kiri 7. Delete kiri 4 Elemen D[ ] n L R Pada Kondisi ini : L = 4, R = 4 Pada posisi mana saja jika L = R maka antrian Kosong KONDISI ANTRIAN 1 AWAL L = R = 0 CIRI 2 KOSONG L = R dimana saja 3 PENUH KIRI PENUH KANAN L = 0 R = n PENUH SEBENARNYA L = 0 dan R = n 4 ADA ISINYA L <> R atau L < R ALGORITMA PROSES AWAL (INISILISASI) Pointer L dan R berada di 0 void AWAL(void) L = 0; R = 0; ALGORITMA DASAR PROSES INSERT KANAN(MASUK KANAN) - Pointer R maju 1 langkah - Kemudian Isikan data kedalam elemen yang ditunjuk oleh R 15

75 void INSERT_KANAN(void) R = R +1 ; D[R]=X; ALGORITMA DASAR PROSES DELETE KANAN(HAPUS KANAN) - Copy data dari Elemen yang ditunjuk oleh R ke suatu Variabel. - Mundur R sebanyak 1 void DELETE_KANAN(void) X = D[R]; R = R - 1 ; 1. Buat algoritma dasar Insert kiri dan delete kiri 2. Buat Proc. Lengkap Insert Kiri, Delete Kiri, Insert Kanan, Delete Kanan 16

76 Praktikum Soal 1 Anda diminta untuk membuat suatu program animasi ANTRIAN LURUS dengan 4 buah pilihan : MASUK, KELUAR, LIHAT ANTRIAN, QUIT. Jika dipilih MASUK maka program akan meminta user untuk menginput sebuah character yang akan dimasukkan kesebuah wadah. Jika dipilih KELUAR maka character pertama masuk akan dikeluarkan dari wadah. Jika dipilih LIHAT ANTRIAN maka komputer akan menampilkan character antrian yang ada pada wadah. Jika dipilih QUIT maka program keluar. LAYOUT ANIMASI ANTRIAN 1. MASUK 2. KELUAR 3. LIHAT ANTRIAN 4. QUIT PILIH 1 4 : 1 Masukkan sebuah huruf : M M E R C U 17

77 Soal 2 Anda diminta untuk membuat suatu program animasi ANTRIAN CIRCULAR dengan 4 buah pilihan : MASUK, KELUAR, LIHAT ANTRIAN, QUIT. Jika dipilih MASUK maka program akan meminta user untuk menginput sebuah character yang akan dimasukkan. Jika dipilih KELUAR maka character yang ditunjuk oleh pointer F akan dikeluarkan. Jika dipilih LIHAT ANTRIAN maka komputer akan menampilkan character antrian yang ada. Jika dipilih QUIT maka program keluar. LAYOUT ANIMASI ANTRIAN CIRCULAR 1. MASUK 2. KELUAR 3. LIHAT ANTRIAN 4. QUIT PILIH 1 4 : 1 Masukkan sebuah huruf : I M E R C U Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 18

78 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 6 SORTING (PENGURUTAN) Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang konsep dari sorting (pengurutan) dan penerapannya Kompetensi Mampu memahami konsep dasar dari sorting (pengurutan) dan penerapannya

79 SORT Pengertian Sort Pengurutan data dalam struktur data sangat penting terutama untuk data yang beripe data numerik ataupun karakter. Pengurutan dapat dilakukan secara ascending (urut naik) dan descending (urut turun) Pengurutan (Sorting) adalah proses pengurutan data yang sebelumnya disusun secara acak sehingga tersusun secara teratur menurut aturan tertentu Contoh: Data Acak : Ascending : Descending : Para pengguna Komputer memang sudah banyak dimanjakan oleh fasilitas yang diberikan oleh bahasa pemrograman atau software application yang digunakan, terutama bahasa pemrograman yang telah dirancang untuk kebutuhan tertentu(paket program). Di bahasa pemrograman dbase,foxpro untuk melakukan pengurutan data tinggal menulis perintah SORT atau INDEX saja, maka urusan pengurutan data sudah selesai. Kita tidak tahu bagaimana komputer bekerja(menggunakan teknik bagaimana) sortir terhadap data yang dilakukannya. Namun untuk bahasa pemrograman yang sifatnya generik, untuk mensortir data, kita perlu membuat programnya sendiri dan sudah barang tentu harus memikirkan teknik seperti apa untuk melakukan sortir tersebut. Pada garis besarnya ada tiga teknik sortir yaitu : a. Insertion Sort (Sort penyisipan) b. Selection Sort (Sortir pemilihan) c. Exchange Sort (Sortir Penukaran) Deklarasi Array Deklarasikan secara global: int data[100]; int n; //untuk jumlah data 2

80 Prosedur Tukar 2 Buah Data: void tukar(int a,int b) int tmp; tmp = data[a]; data[a] = data[b]; data[b] = tmp; a. Insertion Sort Teknik ini adalah membandingkan elemen ke-n (n dimulai dari 2 hingga elemen terkahir) dengan elemen-elemen sebelumnya. Bila elemen elemen yang dibandingkan bernilai lebih kecil, maka tukar posisinya. Contoh pengurutan Ascending i Data[ ] Langkah pengurutan 1. Data ke 2 dibandingkan dengan data ke 1 i=1 Data[2] = Data ke 3 dibandingkan dengan data ke 2 dan ke 1 i=2 Data[3]= Data ke 4 dbandingkan dengan data ke 3,ke 2 dan ke 1 i=3 Data[4]= Hasil akhir

81 b. Selection Sort Teknik ini adalah mencari nilai elemen terkecil kemudian letakkan dan tukar dengan posisi ke-n Merupakan kombinasi antara sorting dan searching Untuk setiap proses, akan dicari elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar akan dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil (data[0]), pada putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks pembanding saja, pertukaran data secara fisik terjadi pada akhir proses. Algoritma : 1. Repeat Langkah 1. s/d 3. sebanyak n-1 2. Cari Index dari harga terkecil/terbesar 3. Tukarkan nilai index pertama dengan index terkecil/terbesar yang ada dalam elemen loop 4

82 J Keterangan Kotak Terjadi perpindahan data 5

83 c. Exchange Sort (Buble Sort) Metode sorting termudah Diberi nama Bubble karena proses pengurutan secara berangsur angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar, jika pengurutan ascending. Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar, jika pengurutan descending Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya. Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian seterusnya. Kapan berhentinya? Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan. Algoritma : 1. Repeat Langkah 2. s/d 4 sebanyak n-1 kali 2. Repeat Langkah 3. untuk elemen yang belum sort 3. Jika Current Elemen > Next Elemen, tukar 4. Jika tidak ada pertukaran, Return J kj

84 Exc=6 Exc=4 Exc=2 Exc=1 Exc=1 Exc=0 Kondisi terjelek adalah - Jika data terkahir adalah yang terkecil untuk sort ascending, Jika data terakhir adalah yang terbesar untuk sort descending 7

85 SOAL 1. Buatlah pengurutan menggunakan metode Bubble Sort Secara Ascending dari data dibawah ini : Buatlah pengurutan menggunakan metode Selection Sort Secara Descending dari data dibawah ini : Buatlah pengurutan menggunakan metode Insertion Sort Secara Descending dari data dibawah ini : Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 8

86 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 7 PENERAPAN APLIKASI LINKED LIST, STACK DAN QUEUE Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan aplikasi linked list, stack dan queue Kompetensi Mampu memahami penerapan aplikasi linked list, stack dan queue

87 Aplikasi Linked List untuk Stack & Queue STACK I Stack dengan menggunakan Simpul Head Simpul Head tidak berisi data merupakan HEAD sebagai dummy TOP DASAR INFO LINK INFO LINK INFO LINK INFO LINK INFO LINK Push (4) (3) (2) (1) Pop (1) (2) (3) (4) Fungsi untuk membuat simpul HEAD Void HEAD(void) P=(struct SIMPUL*) malloc(sizeof(struct SIMPUL*)); P->INFO=0; DASAR = P; TOP=P; TOP->LINK=NULL; INFO diisi nilai dummy misal=0 Soal : Buat Fungsi PUSH dan POP 2

88 Contoh Program STACK I #include<iostream.h> #include<conio.h> void PUSH(void); void POP(void); void CETAKLAYAR(void); int PIL,TOP,DASAR; char WADAH[7]; void main( ) TOP=0; DASAR=0; do clrscr(); cout<<" MENU UTAMA"<<endl; cout<<"=============="<<endl; cout<<"1. PUSH"<<endl; cout<<"2. POP"<<endl; cout<<"3. CETAK STACK"<<endl; cout<<"4. QUIT"<<endl<<endl; cout<<"pilihan : "; cin>>pil; switch (PIL) case 1 : PUSH( ); break; case 2: POP( ); break; case 3: CETAKLAYAR(); 3

89 while (PIL<4); break; default: cout<<"terima KASIH"; break; getch(); void PUSH(void) char HURUF; clrscr(); cout<<endl<<"masukkan 1 HURUF : "; cin>>huruf; TOP=TOP+1; WADAH[TOP]=HURUF; void CETAKLAYAR(void) int i; clrscr(); i=7; for (i=7; i>0; i--) cout<<i<<" "<<WADAH[i]<<endl; Program diatas belum sempurna sebagian jawaban dari pertanyaan yang diatas. Ditanya : 1. Lengapilah Procedure untuk PUSH 2. Buat Procedure lengakap untuk POP 4

90 STACK II Stack tanpa Simpul Head TOP INFO LINK INFO LINK INFO LINK INFO LINK Push (4) (3) (2) (1) Pop (1) (2) (3) (4) Bila Isi Stack tinggal 1 kemudian di delete (POP) maka TOP dibuat = NULL Soal : Buat Fungsi PUSH dan POP Contoh Program STACK II #include <iostream.h> #include <stdlib.h>// untuk penggunaan system("cls"); #include <conio.h>// untuk getch(); int n=10,dasar1=0,dasar2=n+1,top1=0,top2=n+1,pil,j; char wadah[10]; char huruf; void push1(void) system("cls"); if(top2-top1>1) // if(top2-top1>1) cout<<"input 1 huruf : "; cin>>huruf; top1=top1+1; wadah[top1]=huruf; else cout<<endl<<"==============="<<endl; 5

91 cout<<"stack PENUH!!!"<<endl; cout<<"kurangi STACK!!"<<endl; cout<<"==============="<<endl; void pop1(void) system("cls"); if(top1>0) huruf=wadah[top1]; cout<<"huruf yang di hapus : "<<huruf<<endl; top1=top1-1; else cout<<endl<<"==============="<<endl; cout<<"stack KOSONG!!!"<<endl; cout<<"tambah STACK!!"<<endl; cout<<"==============="<<endl; void push2(void) system("cls"); if(top2-top1>1) cout<<"input 1 huruf : "; cin>>huruf; top2=top2-1; wadah[top2]=huruf; else cout<<endl<<"==============="<<endl; cout<<"stack PENUH!!!"<<endl; cout<<"kurangi STACK!!"<<endl; 6

92 cout<<"==============="<<endl; void pop2(void) system("cls"); if(top2<n+1) huruf=wadah[top2]; cout<<"huruf yang di hapus : "<<huruf<<endl; top2=top2+1; else cout<<endl<<"==============="<<endl; cout<<"stack KOSONG!!!"<<endl; cout<<"tambah STACK!!"<<endl; cout<<"==============="<<endl; void c_stack(void)// menampilkan array terakhir yang pernah terisi, jadi walaupun sudah dikurangi akan tetap menampilkan huruf yang pernah mengisinya system("cls"); int i; cout<<"huruf yang mengisi : "; for(j=0;j<11;j++) cout<<wadah[j]<<" "; cout<<endl<<endl; for(i=0+1;i<11;i++) cout<<i<<". "<<wadah[i]<<endl; void main()// program 7

93 x:// ke menu utama for( ;pil<1000; ) system("cls"); cout<<endl<<"menu UTAMA"<<endl; cout<<"=========="<<endl; cout<<"1.push1"<<endl; cout<<"2.pop1"<<endl; cout<<"3.push2"<<endl; cout<<"4.pop2"<<endl; cout<<"5.cetak STACK"<<endl; cout<<"6.quit"<<endl; cout<<"pilihan (1-6) : "; cin>>pil; switch(pil) case 1: push1(); // memanggil fungsi push break; case 2: pop1(); // memanggil fungsi pop break; case 3: push2(); break; case 4: // mengakhiri program pop2(); break; case 5: c_stack(); // memanggil fungsi c_stack break; case 6: cout<<endl<<"terima KASIH"<<endl; goto y; break; 8

94 default: cout<<endl<<"anda SALAH INPUT"<<endl; getch(); goto x;// kembali ke menu utama bila salah break; getch();// untuk mempertahankan output sebelum menekan sebarang tombol(menunggu input sebarang output) y:// untuk mengakhiri program Contoh Program STACK III #include <iostream.h> #include <stdlib.h>// system("cls"); #include <conio.h>// getch(); char wadah[11]; int p,i,j,n=10,d1=(n/2)+1,d2=n/2,t1=(n/2)+1,t2=n/2; char huruf; /*struct awal int d1; int d2; int t1; int t2; ;*/ void push1(void); void pop1(void); void push2(void); void pop2(void); void cetak(void); void main() 9

95 x: for( ;i<1000; ) system("cls"); cout<<"=============================="<<endl; cout<<"= MENU UTAMA ANIMASI STACK 3 ="<<endl; cout<<"=============================="<<endl; cout<<"= Pilihan : 1.Push1 "<<endl; cout<<"= 2.Pop1 "<<endl; cout<<"= 3.Push2 "<<endl; cout<<"= 4.Pop2 "<<endl; cout<<"= 5.Cetak Stack "<<endl; cout<<"= 6.Quit "<<endl; cout<<"=============================="<<endl; cout<<"pilihan anda : "; cin>>p; switch(p) case 1: push1(); break; case 2: pop1(); break; case 3: push2(); break; case 4: pop2(); break; case 5: cetak(); break; case 6: cout<<"terima KASIH"<<endl; 10

96 goto y; default: cout<<"anda SALAH INPUT!!"<<endl; cout<<"ulangi Masukan angka (1-6)"<<endl; getch(); goto x; getch(); y: void push1(void) system("cls"); if(t1>1)// nb: deklarasikan lebih dulu nilai t1,t2,d1,d2 cout<<"masukan 1 huruf : "; cin>>huruf; t1=t1-1; wadah[t1]=huruf; else cout<<"stack Penuh"<<endl; cout<<"kurangi stack"<<endl; void pop1(void) system("cls"); if(t1<d1) huruf=wadah[t1]; cout<<"huruf yang di hapus : "<<huruf<<endl; t1=t1+1; 11

97 else cout<<"stack Kosong"<<endl; cout<<"tambah Stack"<<endl; void push2(void) system("cls"); if(t2<n) cout<<"masukan 1 huruf : "; cin>>huruf; t2=t2+1; wadah[t2]=huruf; else cout<<"stack Penuh"<<endl; cout<<"kurangi Stack"<<endl; void pop2(void) system("cls"); if(t2>d2) huruf=wadah[t2]; cout<<"huruf yang di hapus : "<<huruf<<endl; t2=t2-1; else cout<<"stack Kosong"<<endl; cout<<"tambah Stack"<<endl; 12

98 void cetak(void) cout<<"huruf yang mengisi : "; for(i=1;i<11;i++) cout<<wadah[i]<<" "; cout<<endl<<endl; for(j=1;j<11;j++) cout<<j<<"."<<wadah[j]<<endl; QUEUE Ilustrasi untuk QUEUE FRONT REAR INFO LINK INFO LINK INFO LINK INFO LINK INSERT (1) (2) (3) (4) DELETE (1) (2) (3) (4) Soal : Buat Fungsi INSERT dan DELETE 13

99 Contoh Program QUEUE #include <iostream.h> #include <stdlib.h> #include <conio.h> int r=0,f=0,pil,n=10,i,j; char wadah[11];// ada 11 elemen 0-10 dan yang mengisi antrian 10 elemen 1-10 char huruf; void masuk(void); void keluar(void); void cetak(void); void main() x: for( ;pil<1000; ) system("cls"); cout<<"======================"<<endl; cout<<"= MENU UTAMA ="<<endl; cout<<"======================"<<endl; cout<<"= Pilihan : 1.Input ="<<endl; cout<<"= 2.Hapus ="<<endl; cout<<"= 3.Cetak ="<<endl; cout<<"= 4.Quit ="<<endl; cout<<"======================"<<endl; cout<<"pilihan Anda : "; cin>>pil; switch(pil) case 1: masuk(); break; case 2: keluar(); break; case 3: 14

100 cetak(); break; case 4: cout<<"terima Kasih"<<endl; goto y; break; default: cout<<"anda SALAH input"<<endl; cout<<"masukan nilai 1-6"<<endl; goto x; getch(); y: void masuk(void) system("cls"); if(r<n) cout<<"masukan 1 huruf : "; cin>>huruf; r=r+1; wadah[r]=huruf; else cout<<"antrian Penuh"<<endl; /*if((r=n)&&(f=n)) enga boleh disini alasan enga tau f=0; r=0; */ 15

101 void keluar(void) system("cls"); if(f<r) f=f+1; huruf=wadah[f]; wadah[f]=null; cout<<"huruf yang keluar antrian : "<<huruf<<endl; else cout<<"antrian Kosong"<<endl<<endl; cout<<"antrian di reset"<<endl; if((r=n)&&(f=n))// reset f=0; r=0; void cetak(void) system("cls"); cout<<"huruf yang mengisi antrian : "; for(i=1;i<n+1;i++) cout<<wadah[i]<<" "; cout<<endl; for(j=0;j<n+1;j++) cout<<j<<"."<<wadah[j]<<endl; 16

102 Contoh Program Double Linked List #include <iostream.h> #include <conio.h> #include <stdlib.h> struct simpul char info; struct simpul *r,*l; ; struct simpul *first,*last,*p,*q,*t; int pil; char x,n,i,m; void awal(); void in_kanan(); void in_kiri(); void in_tengah(); void de_kanan(); void de_kiri(); void de_tengah(); void tampil(); void main() system("cls"); do system("cls"); cout<<" "<<endl; cout<<"double LINK LIST"<<endl; cout<<" "<<endl; cout<<"1.buat simpul awal"<<endl; cout<<"2.insert kanan"<<endl; cout<<"3.insert kiri"<<endl; cout<<"4.insert tengah"<<endl; cout<<"5.delete kanan"<<endl; cout<<"6.delete kiri"<<endl; cout<<"7.delete tengah"<<endl; 17

103 cout<<"8.tampilkan link"<<endl; cout<<"9.exit"<<endl; cout<<" "<<endl; cout<<"pilihan (1-9) : "; cin>>pil; switch(pil) case 1: awal(); break; case 2: in_kanan(); break; case 3: in_kiri(); break; case 4: in_tengah(); break; case 5: de_kanan(); break; case 6: de_kiri(); break; case 7: de_tengah(); break; case 8: tampil(); break; case 9: cout<<"thank You"<<endl; getch(); break; 18

104 while(pil<9); void awal() system("cls"); if((first==null)&&(last==null))// pada posisi awal *first & *last =NULL karena data belum pernah di buat (p=(struc simpul*)malloc(sizeof(struct simpul)); // baru di deklarasi sebagai struct simpul p=(struct simpul*)malloc(sizeof(struct simpul)); cout<<"masukan 1 huruf simpul awal : "; cin>>x; p->info=x; p->r=null; p->l=null; first=p; last=p; cout<<"isi simpul first : "<<first->info<<endl; cout<<"isi simpul last : "<<last->info<<endl; else cout<<"simpul awal telah ada"<<endl; getch(); void in_kanan() system("cls"); cout<<"masukan 1 huruf : "; cin>>x; p=(struct simpul*)malloc(sizeof(struct simpul)); p->info=x; last->r=p; p->l=last; last=p; last->r=null; 19

105 getch(); void in_kiri() system("cls"); cout<<"masukan 1 huruf : "; cin>>x; p=(struct simpul*)malloc(sizeof(struct simpul)); p->info=x; first->l=p; p->r=first; first=p; first->l=null; getch(); void in_tengah() system("cls"); if((first==null)&&(last==null)) cout<<"simpul awal belum ada!!!"<<endl; cout<<"masukan 2 simpul untuk insert tengah"<<endl; else if(first==last) cout<<"belum bisa insert tengah"<<endl; cout<<"baru ada satu simpul"<<endl; cout<<"harus ada 2 simpul untuk insert tengah"<<endl; else system("cls"); cout<<"masukan 1 huruf : "; cin>>x; p=(struct simpul*)malloc(sizeof(struct simpul)); p->info=x; first->r->l=null;// l->first di putus tapi tetap nyambung pada first->r 20

106 first->r->l=p; p->r=first->r;// line p->r=first->r posisi di samakan first->r=null;// line menuju * setelah first di putus p->l;first;// p di sambung ke first first->r=p;// first di sambung ke p getch(); void de_kanan() system("cls"); if((last==null)&&(first==null)) cout<<"simpul kosong"<<endl<<endl; else if(first==last) x=first->info; last=null; first=null; cout<<"huruf yang di hapus : "<<x<<endl; else last=last->l; x=last->r->info; cout<<"huruf yang di hapus : "<<x<<endl; free(last->r); last->r=null; getch(); void de_kiri() system("cls"); if((first==null)&&(last==null)) 21

107 cout<<"simpul kosong"<<endl<<endl; else if(first==last) x=first->info; first=null; last=null; cout<<"huruf yang di hapus"<<endl; else first=first->r; x=first->l->info; cout<<"huruf yang terbuang : "<<x<<endl; free(first->l); first->l=null; getch(); void de_tengah() system("cls"); if((first==null)&&(last==null)) cout<<"simpul kosong!!!"<<endl; else if(first==last) cout<<"hanya ada satu simpul"<<endl; cout<<"tidak bisa delete tengah"<<endl; cout<<"harus ada tiga simpul"<<endl; else if((first->r==last)&&(last->l==first)) cout<<"hanya ada dua simpul"<<endl; cout<<"tidak bisa delete tengah"<<endl; cout<<"harus ada tiga simpul"<<endl; 22

108 else q=first->r->r; x=first->r->info; first->r=null; first->r=q; q->l=first; cout<<"huruf yang di hapus : "<<x<<endl; getch(); void tampil() system("cls"); cout<<"isi data dalam link"<<endl; p=first; while(p!=null) x=p->info; cout<<" "<<x; p=p->r; cout<<endl; getch(); 23

109 Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 24

110 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 8 SORTING LANJUT Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan aplikasi sorting merge sort, heap sort dan radix sort Kompetensi Mampu memahami penerapan aplikasi sorting merge sort, heap sort dan radix sort

111 Sorting Lanjutan Teknik Sorting Iainnya 1. Merge Sort Sort ini digunakan untuk jumlah data yang besar, dengan membagi-bagi menjadi sub bagian-sub bagian mulai dari sedikit elemen hingga keseluruhan elemen tersebut menjadi data yang sudah urut. Sortir ini digunakan jika kapasitas memori tidak sanggup untuk menampung seluruh data yang akan disortir. Contoh 14 elemen berikut akan disortir: 66, 33, 40, 22, 55, 88, 60, 11, 80, 20, 50, 44, 77, 30. Langkah 1 : data dibagi menjadi sub-sub yang tiap subnya berisi 2 elemen yang kemudian disortir hasilnya : 33, 66 22, 40 55, 88 11, 60 20, 80 44, 50 30, 70 Langkah 2 : gabungkan 2 sub bagian sebelumnya menjadi 1 sub bagian kemudian disortir hasilnya : 22, 33, 40, 66 11, 55, 60, 88 22, 44, 50, 80 30, 70 Langkah 3 : Lakukan seperti langkah 2 hingga seluruh sub bagian menjadi 1 subbagian. 11, 22, 33, 40, 55, 60, 66, 88 20, 30, 44, 50, 77, 80 Hasil Akhir : 11, 20, 22, 30, 33, 40, 44, 50, 55, 60, 66, 77, 80, 88 Contoh Program Merge Sort 1. #include <iostream.h> 2. #include <conio.h> 3. int a[50]; 4. void merge(int,int,int); 5. void merge_sort(int low,int high) int mid; 8. if(low<high) 9. 2

112 10. mid=(low+high)/2; 11. merge_sort(low,mid); 12. merge_sort(mid+1,high); 13. merge(low,mid,high); void merge(int low,int mid,int high) int h,i,j,b[50],k; 19. h=low; 20. i=low; 21. j=mid+1; 22. while((h<=mid)&&(j<=high)) if(a[h]<=a[j]) b[i]=a[h]; h++; else b[i]=a[j]; j++; 31. i++; if(h>mid) for(k=j;k<=high;k++) b[i]=a[k]; i++; else for(k=h;k<=mid;k++) b[i]=a[k]; i++; for(k=low;k<=high;k++) 48. a[k]=b[k]; void main() int num,i; cout<<"************************************************************* ****** *************"<<endl; 53. cout<<" MERGE SORT PROGRAM "<<endl; 54. cout<<"******************************************************************* **** *********"<<endl; 55. cout<<endl<<endl; 56. cout<<"masukkan Banyak Bilangan: ";cin>>num; 57. cout<<endl; 58. cout<<"sekarang masukkan "<< num <<" Bilangan yang ingin Diurutkan :"<<endl; 59. for(i=1;i<=num;i++) cout<<"bilangan ke "<<i<<" ";cin>>a[i] ; merge_sort(1,num); 64. cout<<endl; 65. cout<<"hasil akhir pengurutan :"<<endl; 66. cout<<endl; 67. for(i=1;i<=num;i++) 68. cout<<a[i]<<" "; 69. cout<<endl<<endl<<endl<<endl; 70. getch(); 71. 3

113 2. Heap Sort : Aplikasi dari Binary Tree Heap sort merupakan teknik sortir yang memanfaatkan bentuk pohon binary. Maxheap adalah penyortiran dari besar ke kecil (Desending). Minheap adalah penyortiran dari kecil ke besar (ascending). Untuk melakukan penyortian ini maka langkah pertama yang dilakukan adalah membentuk pohon heap. Pembentukan pohon heap dilakukan dengan langkah-langkah : 1. Ikuti bentuk complete binary tree ( pohon biner lengkap) 2. Ayah harus memiliki nilai lebih besar atau sama dengan anak-anaknya (untuk maxheap), ayah harus memiliki nilai lebih kecil atau sama dengan anakanaknya (unutk minheap) Pada contoh ini akan dibuat pohon maxheap dengan elemen-elemen : a. elemen 44 b. elemen 30 c. elemen d. elemen 22 e. elemen 60 f. elemen 55 4

114 g. elemen 77 h. elemen 55 Penulisan hasil sortir mengikuti langkah-langkah penghapusan elemen sebagai berikut : 1. Hapus akarnya (Root) 2. Letakkan elemen terakhir di posisi akarnya (root) 3. lakukan tindakan atas elemen tersebut seperti langkah-langkah pembuatan pohon heap. 4. Lakukan Langkah 1 hingga pohon menjadi kosong (empty tree) Perhatikan gambar dibawah ini bagaimana setelah elemen 77 (root) dihapus atau dijadikan elemen awal dari hasil sortir a. penghapusan elemen 77, maka elemen 22 jadi root 5

115 b. elemen 22 mengarah keanak kanan c. elemen 22 mengarah keanak kanan ( fase 1 ) 3 gambar diatas pembentukan pohon heap kembali setelah elemen 77 dihilangkan untuk fase 2 elemen 60 sebagai akar akan dijadikan hasil, sehingga elemen elemen hasil sortirnya menjadi 77, 66 dan seterusnya. Berikut gambar heap pada akhir fase 2 hingga fase 7 (akhir) a. pohon heap pada akhir fase 2 6

116 b. pohon heap pada akhir fase c. pohon heap pada akhir fase d. pohon heap pada akhir fase e. pohon heap pada akhir fase 6 7

117 22 f. pohon heap pada akhir fase 7 sehingga diperoleh urutan : Contoh Aplikasi Heap Sort #include <iostream.h> //mendeklarasikan header untuk fungsi I/O "cout & cin" #include <conio.h> //mendeklarasikan header untuk fungsi penahan layar "getch();" void main() //inti dari program int a[10] = 34, 15, 23, 9, 41, 26, 39, 11, 7, 28 ; //mendeklarasikan variabel a dengan jumlah data 10 cout<<"program Heap Sort..."<<endl; cout<<"mengurutkan Bilangan..."<<endl; cout<<"bilangan sebelum diurutkan : "<<endl<<endl; for(int h = 0; h <= 9; h++) //proses pengulangan untuk menampilkan data data di variabel a ke layar cout<<" "<<a[h]<<" "; cout<<" "<<endl<<endl; for(int i = 0; i <= 9; i++) //ini adalah bagian inti dari proses HEAP SORT. //inti dari program ini adalah membandingkan nilai pertama & kedua for(int j = 0; j <= i; j++) //kemudian mencari nilai mana yang paling besar. //kemudian ditempatkan di awal. dan seterusnya if(a[i]>a[j]) int t = a[i]; a[i] = a[j]; a[j] = t; 8

118 cout<<" "<<endl<<endl; cout<<"bilangan Setelah diurutkan : "<<endl; cout<<endl; cout<<" Diurutkan dari yang Terkecil => Terbesar : "<<endl<<endl; //mengurutkan data dari yang terkecil ke terbesar cout<<" "; for(int i = 9; i >= 0; i ) //digunakan pengulangan. cout<<" "<<a[i]<<" "; cout<<" "<<endl<<endl; cout<<" Diurutkan dari yang Terbesar => Terkecil : "<<endl<<endl; //mengurutkan data dari yang terbesar ke terkecil cout<<" "; for(int i = 0; i <=9; i++) cout<<" "<<a[i]<<" "; cout<<" "<<endl<<endl; cout<<" "<<endl<<endl; cout<<"terima KASIH..."<<endl<<endl; getch(); 3. Radix Sort Contoh penyelesaian sortir cara Radix sort adalah ketika kita diminta untuk mensortir ratusan lembar jawaban ujian berdasarkan namanya. Maka langkah pertama yang kita lakukan adalah dengan menumpuk lembar jawaban tersebut menjadi tumpukan-tumpukan yang memiliki huruf depan yang sama dari nama peserta. Kemudian kita perhatikan hurufhuruf kedua dan seterusnya(kita urutkan perabjad dahulu lalu tumpuk menjadi satu). Sebenarnya masih banyak teknik-teknik sortir lainnya yang tidak dibahas dalam catatan ini, dan anda juga dapat memikirkan untuk membuat teknik sendiri sebagai metode anda dalam sort /search data. Contoh Program 9

119 1. /* 2. * C++ Program To Implement Radix Sort 3. */ 4. #include <iostream> 5. #include <cstdlib> 6. using namespace std; 7. /* 8. * get maximum value in arr[] 9. */ 10. int getmax(int arr[], int n) int max = arr[0]; 13. for (int i = 1; i < n; i++) 14. if (arr[i] > max) 15. max = arr[i]; 16. return max; /* 19. * count sort of arr[] 20. */ 21. void countsort(int arr[], int n, int exp) int output[n]; 24. int i, count[10] = 0; 25. for (i = 0; i < n; i++) 26. count[(arr[i] / exp) % 10]++; 27. for (i = 1; i < 10; i++) 28. count[i] += count[i - 1]; 29. for (i = n - 1; i >= 0; i--) output[count[(arr[i] / exp) % 10] - 1] = arr[i]; 32. count[(arr[i] / exp) % 10]--; for (i = 0; i < n; i++) 35. arr[i] = output[i]; /* 38. * sorts arr[] of size n using Radix Sort 39. */ 40. void radixsort(int arr[], int n) int m = getmax(arr, n); 10

120 43. for (int exp = 1; m / exp > 0; exp *= 10) 44. countsort(arr, n, exp); /* 48. * Main 49. */ 50. int main() int arr[] = 170, 45, 75, 90, 802, 24, 2, 66; 53. int n = sizeof(arr)/sizeof(arr[0]); 54. radixsort(arr, n); 55. for (int i = 0; i < n; i++) 56. cout << arr[i] << " "; 57. return 0; 58. Latihan Buatlah pengurutan dari data dibawah ini Insertion Sort 2. Selection Sort 3. Buble Sort 4. Merge Sort 5. Heap Sort 6. Radix Sort 11

121 Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 12

122 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 9 TREE Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan aplikasi TREE beserta jenis-jenisnya Kompetensi Mampu memahami penerapan aplikasi tree beserta jenis-jenisnya

123 Tree Jenis-jenis Tree Struktur Data Non Linier terdiri dari : 1. Struktur Pohon (Tree Structure) 2. Graph Definisi Pohon adalah : Susunan dari satu atau lebih simpul(node) yang terdiri dari satu simpul khusus yang disebut akar(root) sedang sisanya membentuk subtree dari akar. Level A 1 B C D 2 E F G H I J 3 K L M 4 Akar dari struktur pohon ini adalah A Satu simpul akan berisi : - Informasi ( misal, A, B, dst) - Cabang-cabang (Link) yang menghubungkan Kesimpul simpul yang lain. Simpul A sebagai akar mempunyai 3 Link yang membentuk SUBTREE B,C, D. Jumlah SUBTREE dari satu simpul disebut : DERAJAT (DEGREE). Derajat Simpul : A = 3 B = 2 C = 1 G = 0 2

124 Simpul yang mempunyai derajat = 0 disebut : SIMPUL TERMINAL atau DAUN (LEAF) Contoh simpul daun gambar diatas adalah : K, L, F, G, M, I, J Struktur Pohon yang terkenal adalah struktur geneologi (silsilah). Dalam struktur tersebut adanya simpul anak (children) dan orangtua (parent) Contoh anak D adalah H, I, J Orangtua D adalah A Anak dari orang tua yang sama (saudara sekandung) disebut sibling misal H,I,J. DERAJAT (DEGREE) SUATU POHON: Adalah derajat maksimum dari suatu simpul dalam pohon. Contoh derajat pohon dalam gambar diatas adalah 3. Nenek Moyang dari dari suatu simpul adalah seluruh simpul-simpul yang ada sepanjang lintasan dari akar sampai simpul tersebut. Contoh nenek moyang dari M adalah A, D dan H. KEDALAMAN (HEIGHT atau DEPTH) Kedalaman suatu pohon ditentukan oleh level maksimum dari simpul dalam pohon. Contoh kedalaman pohon dari gambar diatas adalah 4 HUTAN (FOREST) Adalah susunan dari beberapa pohon. Bila akar A dihilangkan maka akan diperoleh hutan dengan 3 pohon yaitu : B(E(K,L),F) C(G) D(H(M),I,J) Ada 2 cara untuk menyatakan struktur pohon yaitu : 1. Gambar 2. Daftar(List) Pernyataan dengan Gambar adalah seperti terlihat pada Gambar diatas sedangkan kalau dengan List adalah sebagai berikut : (A(B(E(K,L),F),C(G),D(H(M),I,J)) 3

125 Proses dalam struktur data non linier, bentuk pohon akan lebih mudah digambarkan bila diketahui : n ( Jumlah Simpul atau Node ) k ( Derajat Pohon) Dari data n dan k maka dapat dihitung : JUMLAH LINK = n. k JUMLAH NULL-LINK = n( k - 1)+1 JUMLAH NON ZERO LINK = n - 1 Link = Pointer yang digunakan untuk menunjukan simpul sub ordinat Null Link = Link yang bernilai null, yaitu link yang tidak menunjuk simpul sub ordinat Non Zero Link = Link yang menunjuk simpul atau link yang menghubungkan dua buah simpul STRUKTUR NODE K-ary DATA Child 1 Child-k Pohon 3 - ary : A B C D E F G H I J Dari gambar diatas diket : n = 10, k = 3 4

126 Maka dapat dihitung : JUMLAH LINK = n. k = = 30 JUMLAH NULL LINK = n ( k 1 ) + 1 = 10 ( 3 1 ) + 1 = 21 JUMLAH NON ZERO LINK = n 1 = 10-1 = 9 POHON BINER (BINARY TREE) - Tipe yang sangat penting dari struktur data - Dalam struktur pohon biner hanya dikenal SUBTREE KIRI DAN SUBTREE KANAN saja Simpul dalam pohon biner adalah : Susunan dari simpul-simpul yang masing-masing bisa kosong atau terdiri dari akar dan dua pohon biner yang terpisah dan disebut subtree kiri dan subtree kanan. A Pohon biner dengan subtree kanan kosong B C Pohon biner dengan subtree kiri kosong G A B C D E F G Full Binary Tree 5

127 A B C D E Complette Binary Tree Pohon Biner Penuh ( Full Binary Tree) Adalah pohon biner yang mempunyai simpul atau node lengkap dari level 1 sampai level ke I Pohon Biner Lengkap ( Complette Binary Tree) Adalah pohon biner yang mempunyai simpul dengannomor urut 1 sampai dengan n. 6

128 LEVEL ANAK TERKIRI ANAK TERKANAN No anak kiri (Left Child) = No. Parent * 2 No anak kanan (Right Child) = (No. Parent *2) + 1 No Parent = No Child 2 Pertanyaan 1. Pohon dengan simpul jumlah simpul = 273 merupakan lengkap atau penuh 2. Berapa kedalamannya? 3. No berapa simpul terkiri dari level tersebut? 4. berapa jumlah maxsimum simpul level 7 5. No berapa anak kanan dari simpul ke 180?..ada dilevel berapa anak tersebut. 6. No. berapa orang tua dari simpul ke 83? ada dilevel berapa orangtua tsb Kedalaman minimal dari pohon biner adalah : 2 Log n + 1 dimana n = jumlah simpul Contoh bila n = 15 7

129 Maka kedalamannya minimal = 2 Log = Log Log 2 = 1.17 / = = 4 SKEWED TREE Adalah Pohon biner yang miring kekiri atau kekanan, atau dengan kata lain pohon biner dengan subtree kiri kosong atau subtree kanan kosong. A Pohon Biner seperti ini dimpan dalam B C D REPRESENTASINYA sebagai berikut : 1 A 2 B 3 4 C D

130 Kosong sebanyak 7 Elemen Terlihat dari contoh diatas bahwa penyimpanan data dalam memori dari pohon biner hanya menguntungkan kalau pohon binernya penuh sehingga tidak memboroskan tempat. Untuk menanggulangi ini maka perlu menggunakan representasi Linked List, dimana masing-masing simpul akan mempunyai 3 field yaitu : LCHILD DATA RCHILD ATAU DATA LCHILD RCHILD Contoh Representasi Link Pohon Biner Biasa A B C 0 D 0 0 E 0 0 F 0 0 G 0 struct NAMA_SIMPUL Tipe Data DATA; Struct NAMA_SIMPUL *RCHILD, *LCHILD; ; 9

131 Skewed Tree A 0 B 0 C 0 CONTOH PROGRAM 10

132 Output Program : 11

133 Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 12

134 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 10 TREE 2 (PENELUSURAN POHON BINER) Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan aplikasi TREE dalam melakukan penelusuran pohon biner Kompetensi Mampu memahami penerapan aplikasi tree dalam melakukan penelusuran pohon biner

135 PENELUSURAN POHON BINER Macam macam penelusuran Ada 3 macam Traversal : 1. Inorder Traversal 2. Preorder Traversal 3. Postorder Traversal 1. Inorder Traversal - Akan menghasilkan bentuk INFIX - Bentuknya Operand1 Operator Operand2 A + B Contoh Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara INORDER. * + C A B Langkah-langkahnya : 1. Telusuri Subtree(sub pohon) Kiri 2. Proses Simpul Akar 3. Telusuri Subtree(Sub pohon) Kanan maka akan diperoleh persamaan INORDERnya adalah: (A + B) * C 2. Preorder Traversal - Akan menghasilkan bentuk PREFIX - Bentuknya 2

136 Operator Operand1 Operand2 + A B Contoh Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara PREORDER. * + C A B Langkah-langkahnya : 1. Proses Simpul Akar 2. Telusuri Subtree(sub pohon) Kiri 3. Telusuri Subtree(Sub pohon) Kanan maka akan diperoleh persamaan PREORDERnya adalah: * + A B C 3. Postorder Traversal - Akan menghasilkan bentuk POSTFIX - Bentuknya Operand1 Operand2 Operator A B + 3

137 Contoh Tulislah hasil penelusuran pohon biner berikut ini bila ditelusuri secara POSTORDER. * + C A B Langkah-langkahnya : 1. Telusuri Subtree(sub pohon) Kiri 2. Telusuri Subtree(Sub pohon) Kanan 3. Proses Simpul akar maka akan diperoleh persamaan POSTORDERnya adalah: A B + C * Representasi Dari Pohon K-Ary ke Binary. Pohon 3 Ary A B C D E F G H I J 4

138 Kebinary 2 Ary A B E C F G D H I J Pohon K-Ary Jumlah NullLink = n (k 1) +1 Pohon Binary K=2 Jumlah NullLink = n (k 1) +1 = n (2-1) +1 = n + 1 berapa besar penghematan memory bila dirubah ke binary gambar diatas?. Kalau ada 3 pohon kemudian disatukan menjadi 1 pohon. A E G B C D F H I 5

139 A B E C F G D H I Latihan 1. Buat Persamaan INORDER, PREORDER, DAN POST ORDER dari Tree Berikut : * / A + * C D 7 E F G 2. Diket Persamaan POST ORDER : A B / C * D E ** F 2 + Buat INORDER, PREORDER, dan buat Tree nya. 6

140 Contoh Program #include <stdio.h> #include <conio.h> typedef struct Node int data; Node *kiri; Node *kanan; ; void tambah(node **root,int databaru) if((*root) == NULL) Node *baru; baru = new Node; baru->data = databaru; baru->kiri = NULL; baru->kanan = NULL; (*root) = baru; (*root)->kiri = NULL; (*root)->kanan = NULL; printf("data bertambah!"); else if(databaru < (*root)->data) tambah(&(*root)->kiri,databaru); else if(databaru > (*root)->data) tambah(&(*root)->kanan,databaru); else if(databaru == (*root)->data) printf("data sudah ada!"); void preorder(node *root) if(root!= NULL) printf("%d ",root->data); 7

141 preorder(root->kiri); preorder(root->kanan); void inorder(node *root) if(root!= NULL) inorder(root->kiri); printf("%d ",root->data); inorder(root->kanan); void postorder(node *root) if(root!= NULL) postorder(root->kiri); postorder(root->kanan); printf("%d ",root->data); void main() int pil,c; Node *pohon,*t; pohon = NULL; do clrscr(); int data; printf("menu\n"); printf("1. Tambah\n"); printf("2. Lihat pre-order\n"); printf("3. Lihat in-order\n"); printf("4. Lihat post-order\n"); printf("5. Exit\n"); printf("pilihan : "); scanf("%d",&pil); 8

142 switch(pil) case 1: printf ("Data baru : "); scanf("%d",&data); tambah(&pohon,data); break; case 2: if(pohon!=null) preorder(pohon); else printf("masih kosong!"); break; case 3: if(pohon!=null) inorder(pohon); else printf("masih kosong!"); break; case 4: if(pohon!=null) postorder(pohon); else printf("masih kosong!"); break; getch(); while(pil!=5); Output Program Tambah Data: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 5 Data Bertambah MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 2 Data Bertambah MENU 1. Tambah 2. Lihat pre-order 9

143 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 3 Data Bertambah MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 8 Data Bertambah Output Program Pre -Order: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : Output Program In-Order: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : Output Program Post-Order: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan :

144 Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 11

145 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 11 TEKNIK PENCARIAN DATA Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan aplikasi searching seperti linier search, binary search dan fibonaci search Kompetensi Mampu memahami penerapan aplikasi searching seperti linier search, binary search dan fibonaci search

146 TEKNIK PENCARIAN DATA Macam-macam searching File adalah kumpulan record-record sejenis dimana masing masing record lebih dari satu field. Field field tersebut diperlukan untuk memberikan suatu identifikasi bagi masingmasing record. Key (kunci) field untuk identifikasi record akan tergantung pada aplikasi tertentu. Misal : File Mahasiswa menggunkan field yang berisi NOMOR INDUK MAHASIWA (NIM) Ada beberapa cara searching, yaitu : a. Linier Search (Sequential Search) b. Binary Search c. Fibonaci Search Dalam melakukan search ini diasumsikan file dalam keadaan sudah sort (urut). a. Linier Search Pencarian dimulai dari record ke 1, diteruskan ke record berikutnya yaitu record ke 2, ke 3..dst, sampai diperoleh isi record sama dengan informasi yang dicari. Berikut ini Program sederhana Linier Search Jika N = Jumlah Data X = Data yang dicari #include<iostream.h> #include<conio.h> #define N 8 main() int I,NILAI[N+1],X; char GRADE[N+1]; clrscr(); 2

147 NILAI[1]=30; NILAI[2]=40; NILAI[3]=45; NILAI[4]=60; NILAI[5]=65; NILAI[6]=70; NILAI[7]=75; NILAI[8]=80; GRADE[1]='E'; GRADE[2]='D'; GRADE[3]='D'; GRADE[4]='C'; GRADE[5]='C'; GRADE[6]='B'; GRADE[7]='B'; GRADE[8]='A'; cout<<"masukan NILAI YANG DICARI :"; cin>>x; NILAI[N+1]=X; I=1; while (NILAI[I]!=X) I=I+1; if(i==n+1) cout<<"pencarian GAGAL"; else cout<<"nilai DICARI : "<<NILAI[I]<<endl; cout<<"pada LOKASI : "<<I<<endl; cout<<"grade : "<<GRADE[I]; 3

148 Cara ini sangat jelek karena memerlukan waktu yang lama. Kemungkinan terjelek adalah memerlukan waktu N+1, sehingga waktu yang diperlukan untuk search adalah O(n). Waktu yang diperlukan untuk search secara umum : f(n) = O(g(n)) f(n) untuk menyatakan computing time dari beberapa algorithma O(n) disebut waktu linier O(log n) disebut waktu logarithmic, lebih cepat dari waktu linier. b. Binary Search - Merupakan metode terbaik dalam search - Memulai search dari lokasi tengah(middle). Kemudian berdasarkan isi dari lokasi ditengah tersebut dapat diberikan 3 kemungkinan : X = Data yang dicari 1. jika X < K[M] : data yang dicari berada pada bagian bawah dari lokasi middle 2. jika X = K[M] : data tengah adalah data yang dicari. 3. jika X>K[M] : data yang dicari berada pada bagian atas dari lokasi tengah (middle) demikianlah seterusnya setiap sudah ditentukan lokasi tengah, sampai diperoleh data yang dicari. CONTOH : suatu urutan data dengan cacah data N=10; Data tersebut mempunyai nilai sebagai berikut : Logika pencarian : cari data yang bernilai 275 4

149 X = 275 ITERASI LOW HIGH MIDDLE COMPARE < > > = 275 Pencarian dibutuhkan 4 Langkah (iterasi) Misal lagi cari data yang bernilai 591 X = 591 ITERASI LOW HIGH MIDDLE COMPARE > = 591 Pencarian dibutuhkan 2 Langkah (iterasi) Waktu yang diperlukan pada Binary Search adalah : O(Log n) c. Fibonaci Search - Menggunakan cara Search dengan memecah subfile menurut Fibonaci Sequence yaitu : 0, 1, 1, 2, 3, 5, 8, 13, 21, dst diperoleh harga awal Fo = 0 dan F1 = 1 Fibonaci Sequence : F i = F i F i - 2 ; i>=2 Keuntungannnya : Dalam prosesnya hanya menggunakan operator pertambahan dan pengurangan saja. Oleh karena itu waktu rata-rata search lebih cepat dari binary search yang menggunakan pembagian dalam proses searchnya. 5

150 CONTOH : Data yang sudah urut Data ke Cari Data yang berharga 65, X = 65 Diket : n = jumlah record n = 10 Fk + m = n + 1 adalah rumus untuk mencari increament (angka pertambahan) Fk = angka Fibonaci Fk + m = = 11 Fk + m = 11 m = 11 - Fk = 11-8 Fk= 8 adalah angka Fibonaci terdekat dengan 11 m = 3 Langkah-langkahnya : Tentukan F k-1, F k-2, F k-3 Jika Fk = i = F k-1 = 5 p = F k-2 = 3 q = F k-3 = 2 Jika X > K[ i ] maka i = i + m Lakukan While - DO bila i<>0 yang berisi Case of : 1. Jika X < K[ i ] : Jika q = 0 maka i = 0 Jika q<>0 maka i = i q; t=p; p=q ; q=t-q; 2. Jika X = K[ i ] : Data dicari di temukan ( Return) 6

151 3. Jika X > K[ i ] : Jika p=1 maka i=0 Jika p<>0 maka i = i + q; p = p - q; q=q - p Contoh : Dicari data yang berharga 65 X = 65 i = 5 ; p = 3; q = 2; m = 3 Cek : Jika X > K[ i ] maka i = i + m X > K[5] X > 58 - ya maka i = = 8 Masuk While Do : case 65 K[ i ] 65 < K[ 8 ] 65 < 87 - ya maka Jika q<>0 : ya maka i = i q ; t=p ; p=q ; q = t -q i = 8 2 t=3 p=2 q = 3-2 i = 6 q=1 case : 65 = k[ i ] 65 = k[ 6 ] 65 = 65 diperlukan 2 iterasi 7

152 Latihan 1. Suatu data dengan urutan Dicari data 199 Berapa iterasi yang dibutuhkan untuk mendapatkan angka Buat Algoritma dan Program C++ untuk kasus contoh diatas dengan Linier Search. 3. Suatu data dengan urutan Dicari data 199 Berapa iterasi yang dibutuhkan untuk mendapatkan angka 199 dengan Fibonaci Search 4. Buat Algoritma dan Program C++ untuk kasus contoh diatas dengan Fibonaci Search. Contoh Program Binery Search #include <iostream.h> void main() int data[20],n,x,posisi,e,temp,b,c,d,low,high,mid; bool ketemu; cout<<"masukan jumlah data : "; cin>>n; for(b=0;b<n;b++) cout<<"masukan data ke-"<<b+1<<" = "; cin>>data[b]; for(c=0;c<n;c++) for(d=c+1;d<n;d++) if(data[c]>data[d]) temp=data[c]; data[c]=data[d]; data[d]=temp; cout<<"data telah disorting"<<endl; 8

153 for(b=0;b<n;b++) cout<<data[b]<<" "; cout<<endl; cout<<"masukan huruf yang di cari : "; cin>>x; low=0,high=n; for(e=0;e<n;e++) mid=(low+high)/2; if(x==data[mid]) ketemu=true; posisi=mid+1 ; else if(x>data[mid]) low=mid+1; else if(x<data[mid]) high=mid-1; if(ketemu==true) cout<<"data ditemukan pada posisi : "<<posisi<<endl; else cout<<"data tidak ditemukan"<<endl; Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 9

154 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 12 Macam-macam Graph dan Penerapannya Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang macam-macam graph dan penerapannya Kompetensi Mampu memahami macam-macam graph dan penerapannya

155 Graph dan Penerapannya Pengertian Graph Dinyatakan dalam suatu Fungsi G=(V,E) dimana : V = Kumpulan Simpul /Vertex/Node E = Kumpulan Busur/Edge/Arc Tiap Busur pasti menghubungkan 2 Simpul (Vertex) Ada 2 macam Graph : 1. Graph Tak Terarah (Undirect Graph) 2. Graph Terarah (Direct Graph) 1. Graph Tak Terarah ( Undirect Graph) V1 V4 V1 V2 = V2 V1 V1 V4 = V4 - V1 V2 V3 Graph Tak terarah adalah graph yang menghubungkan 2 simpul V1 ke V2 dan V2 ke V1 (2 arah). Bila simpul=n maka graph tak terarah komplit akan mempunyai busur sama dengan n ( n - 1 ) / 2 2. Graph Terarah ( Directed Graph) Hanya dapat menghubungkan 1 arah saja V1 V4 V1 V2 <> V2 V1 V2 V3 2

156 Maksimum jumlah busur dari n simpul adalah : n ( n 1 ) 3. MULTIGRAPH V1 V2 Multigraph adalah 2 buah simpul V1 - V2 yang dihubungkan oleh busur yang jaraknya berbeda-beda. 4. CYCLE V1 Suatu lintasan yang kembali kesimpul semula. 5. BOBOT PANJANG LINTASAN 8 V1 V V2 10 V3 Bobot Panjang Lintasan adalah jumlah busur yang menghubungkan simpul Vx ke simpul Vy Panjang dari V1 ke V4 adalah : Busur 1, 2, = 13 Busur 1, 2, 3, = 22 ( Lintasan Kritis ) Busur 1,

157 5. GRAPH CONECTED Jika untuk setiap pasangan simpul Vi dan Vj ada lintasan yang menghubungkannya. 6. GRAPH UNCONECTED Suatu Graph non connected berisi paling sedikit 1 pasangan yang tidak terhubung. 7. GRAPH PLANAR Adalah graph yang bila digambarkan bisa dengan tidak adanya garis yang berpotongan. Gambar Graph Planar dapat digambarkan tanpa adanya garis berpotongan. 8. GRAPH NONPLANAR Adalah kebalikan dari Graph Planar, jadi Graph nonplanar adalah Graph yang tidak dapat digambarkan tanpa adanya garis yang saling berpotongan. Gambar Graph Nonplanar 4

158 REPRESENTASI GRAPH Terdiri dari : 1. Adjency matrix 2. Adjency List 3. Adjency Array 4. Incidence Matrix 1. ADJENCY MATRIX Orientasinya kesimpul dari Graph Ukuran : A [ n x n ] Dimana A = Matrix, n = jumlah simpul Definisi ai = 1 : Jika ada busur yang menghubungkan simpul i dan j 0 : Jika tidak ada hubungan UNDIRECTED A = DIRECTED 1 A = Kolom menyatakan IN DEGREE Baris menyatakan OUT DEGREE 3 5

159 2. ADJENCY LIST Representasinya dalam bentuk List berangkai Keuntungan : dapat dilakukan penambahan simpul dengan mudah,karena sifatnya dinamis UNDIRECT 1 Vertex Vertex Vertex Vertex DIRECTED 1 Vertex Vertex Vertex3 0 OUT DEGREE Derajat dari tiap simpul dalam Undirected Graph bisa ditentukan dengan menghitung jumlah simpul dalam adjency List. Sedangkan dalam directed graph derajat keluaran (out degree) dapat ditentukan dari jumlah node yang terhubung pada adjency listnya, tapi mengalami kesulitan dalam melihat derajat masukan (indegree) dari tiap simpul. Untuk itu disajikan INVERSE ADJENCY LIST ynag memperlihatkan jumlah derajat masukan dari tiap simpul. 6

160 INVERSE ADJENCY LIST 1 Vertex Vertex Vertex3 2 0 IN DEGREE 3. ADJENCY ARRAY Lebih cocok untuk graph berarah untuk setiap e k mempunyai pasangan simpul asal Vi dan simpul Tujuan Vj. V1 e2 e1 V2 e4 e3 e5 e7 V3 V asal V Tujuan e1 1 2 e2 4 1 e3 2 3 e4 2 5 e5 3 4 e6 5 4 e7 3 5 V4 e6 V5 Asal Tujuan Gabungan dari kedua array tersebut adalah X Simpul Asal awal Simpul Tujuan 7

161 4. INCEDENCE MATRIX Menggambarkan hubungan antara simpul dan busur. Ukuran : I [ n x m ] dimana n = jumlah simpul, m = jumlah busur V2 e3 e1 V3 V1 e2 e4 e7 e5 V5 e6 V4 e1 e2 e3 e4 e5 e6 e I = APLIKASI GRAPH 1. Critical Path (Lintasan Kritis) Lintasan yang paling panjang dari simpul asal sampai simpul tujuan 2. Minimum Spaning Tree Bagaimana mencapai semua simpul dengan total lintasan minimum. 1. Lintasan Kritis : menggunakan Graph berbobot 2 6 Cari Lintasan Kritisnya : Simpul Asal : 1 4 Graph G 9 5 8

162 Lintasan Bobot Alternatif : Diperoleh : Lintasan Kritis = 29 Lintasan Terpendek = Minimum Spanning Tree 2 6 G SubGraph dari G Bobot : =30 1 G SubGraph dari G G SubGraph dari G G SubGraph dari G 5 9

163 2 6 3 G SubGraph dari G G SubGraph dari G 7 maka MST = Latihan Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 10

164 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 13 Macam-macam Graph dan Penerapannya Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan dan penelusuran Graph menggunakan DFS dan BFS Kompetensi Mampu memahami penerapan dan penelusuran Graph menggunakan DFS dan BFS

165 Penelusuran Graph dan penerapannya Penelusuran Graph Penelusuran Graph maksudnya mengunjungi (visit) atau membaca Graph menurut arah tertentu, simpul per simpul, mulai dari simpul tertentu sampai semua simpul dikunjungi tanpa ada simpul yang dikunjungi atau dibaca lebih dari satu kali. Ada 2 macam penelusuran : 1. Depth First Search (DFS), penelusuran dengan mendahulukan arah kedalaman 2. Breadth First Serch (BFS), penelusuran dengan mendahlukan arah melebar 1. Depth First Search Depth First Search (DFS), penelusuran graph yang arah penelusurannya mendahulukan ke arah kedalaman graph tersebut. Pada setiap pencabangan, penelusuran verteks-verteks yang belum dikunjungi dilakukan secara lengkap pada pencabangan pertama, kemudian selengkapnya pada pencabangan kedua, dan seterusnya secara rekursif. Algoritma DFS Traversal dimulai dari simpul v. Algoritma: 1. Kunjungi simpul v, 2. Kunjungi simpul w yang bertetangga dengan simpul v. 3. Ulangi DFS mulai dari simpul w. 4. Ketika mencapai simpul u sedemikian sehingga semua simpul yang bertetangga dengannya telah dikunjungi, pencarian dirunut-balik (backtrack) ke simpul terakhir yang dikunjungi sebelumnya dan mempunyai simpul w yang belum dikunjungi. 5. Pencarian berakhir bila tidak ada lagi simpul yang belum dikunjungi yang dapat dicapai dari simpul yang telah dikunjungi. 2

166 Urutan verteks hasil penelusuran : 3

167 Dalam proses penelusuran, akan terlihat nanti pada suatu titik, 'terpaksa' dilakukan langkah kembali ke simpul sebelumnya. Dalam pemrograman, untuk dapat kembali ke posisi sebelumnya, biasanya diperlukan stack. Pada penelusuran, kita menggunakan stack S, dengan jumlah elemen tidak kurang dari jumlah simpul graph yang ditelusuri. 4

168 2. Breadth First Search Breadth First Search (BFS), penelusuran graph yang arah penelusurannya mendahulukan ke arah 'lebar' graph tersebut. Algoritma BFS BFS diawali dengan vertex yang diberikan, yang mana di level 0. Dalam stage pertama, kita kunjungi semua vertex di level 1. Stage kedua, kita kunjungi semua vertex di level 2. Disini vertex baru, yang mana adjacent ke vertex level 1, dan seterusnya. Penelusuran BFS berakhir ketika setiap vertex selesai ditemui. Traversal dimulai dari simpul v. Algoritma: 1. Kunjungi simpul v, 2. Kunjungi semua simpul yang bertetangga dengan simpul v terlebih dahulu. 3. Kunjungi simpul yang belum dikunjungi dan bertetangga dengan simpul-simpul yang tadi dikunjungi, demikian seterusnya. Urutan verteks hasil penelusuran : 5

169 6

170 Proses penelusuran: Diperlukan sebuah array untuk antrian (Queue) yang diberi nama Q yang jumlah elemenya tidak kurang dari jumlah simpul. 7

171 Latihan Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 8

172 MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Pertemuan 14 Sorting, Searching, graph dan Tree dalam pemecahan masalah Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Ilmu Komputer Teknik Informatika Abstract Membahas tentang penerapan dan penelusuran Graph menggunakan DFS dan BFS Kompetensi Mampu memahami penerapan dan penelusuran Graph menggunakan DFS dan BFS

173 Sort, Search, Tree dan Graph Quick Sort #include<iostream.h> #include<conio.h> #include<iomanip.h> #define MAX 20 void quick_sort(int darr[max], int lb, int ub) int a; int up,down; int temp; if (lb>=ub) return; a=darr[lb]; up=ub; down=lb; while (down<up) while (darr[down] <= a) down++; while (darr[up] > a) up--; if (down < up) temp = darr[down]; darr[down]=darr[up]; darr[up]=temp; darr[lb] = darr[up]; darr[up] = a; quick_sort(darr, lb, up-1); quick_sort(darr,up+1, ub); main() int arr[max], n, ub,lb=0; cout<<endl<<"============================================"; cout<<endl<<" Pengurutan dengan metode quick sort "; cout<<endl<<"============================================"; cout<<endl<<"masukkan jumlah data yang ingin diurutkan :"; cin>>n; ub=n-1; cout<<endl<<"masukkan data-datanya :"; for(int i=0;i<n;i++) cout<<endl<<"masukkan data ke "<<i+1<<" : "; cin>>arr[i]; 2

174 quick_sort(arr,lb,ub); cout<<endl<<"hasil pengurutan :"; for(i=0;i<n;i++) cout<<endl<<setw(10)<<arr[i]; cout<<endl<<"tekan sembarang tombol untuk keluar!!!"<<endl; getch(); return 0; Sort dan Search #include<iostream.h> #include<conio.h> #include<iomanip.h> #include<stdlib.h> void menu(); void linear_search(); void binary_search(); void fibonacci_search(); void linear_sort(); void bubble_sort(); void fibonacci(); void swap(int &value1, int &value2); void tanya(); void salah(); int a,b,n,i,j,m,p,q,t,x,y,fk,fib[100],k,nilai[100],temp; char jawab; main() cout<<setw(50)<<"\n\t========================="; cout<<setw(50)<<"\n\t Searching And Sorting "; cout<<setw(50)<<"\n\t "; cout<<setw(50)<<"\n\t Oleh : "; cout<<setw(50)<<"\n\t========================="; menu(); return 0; void menu() int nomor; system("cls"); cout<<"\n\n\tmenu SEARCHING AND SORTING"; cout<<"\n\t 1 :Linear Search"; cout<<"\n\t 2 :Binary Search"; cout<<"\n\t 3 :Fibonacci Search"; cout<<"\n\t 4 :Linear Sort"; cout<<"\n\t 5 :Exchange (Bubble) Sort"; cout<<"\n\t 6 :Keluar Program"; cout<<"\n\tpilihan Anda : "; cin>>nomor; switch(nomor) 3

175 case 1: linear_search(); break; case 2: binary_search(); break; case 3: fibonacci_search(); break; case 4: linear_sort(); break; case 5: bubble_sort(); break; case 6: tanya(); break; default: salah(); menu(); break; void linear_search() system("cls"); cout<<"\n\nmasukan jumlah nilai : "; cin>>n; for(i=1;i<=n;i++) cout<<"nilai ["<<i<<"] : "; cin>>nilai[i]; cout<<"\napakah data akan disortir? Y/N : "; cin>>jawab; if(jawab=='y' jawab=='y') for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(nilai[i]>nilai[j]) temp=nilai[i]; nilai[i]=nilai[j]; nilai[j]=temp; cout<<"\n\nurutan Ascending data :\n"; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; 4

176 cout<<"\nnilai yang dicari : "; cin>>b; i=1; while(nilai[i]!=b) i++; if(i==n+1) cout<<"\n\tpencarian gagal..."; else cout<<"\n\tnilai yang dicari :"<<nilai[i]; cout<<"\n\tdi lokasi :"<<i; else if(jawab=='n' jawab=='n') cout<<"\nnilai yang dicari : "; cin>>b; i=1; while(nilai[i]!=b) i++; if(i==n+1) cout<<"\n\tpencarian gagal..."; else else tanya(); cout<<"\n\tnilai yang dicari :"<<nilai[i]; cout<<"\n\tdi lokasi :"<<i; salah(); linear_search(); void binary_search() system("cls"); int low,mid,high,flag=0; cout<<"\n\nmasukan jumlah nilai : "; cin>>n; for(i=1;i<=n;i++) cout<<"nilai ["<<i<<"] : "; cin>>nilai[i]; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(nilai[i]>nilai[j]) temp=nilai[i]; nilai[i]=nilai[j]; 5

177 nilai[j]=temp; cout<<"\n\nurutan Ascending data :\n"; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; cout<<"\n\nnilai yang dicari : "; cin>>b; low=1;high=n; while(low<=high&&flag==0) mid=(low+high)/2; if(nilai[mid]==b) flag=1; else if(nilai[mid]<b) low=mid+1; else high=mid-1; if(flag==1) else cout<<"\n\n\tnilai yang dicari : "<<b; cout<<"\n\tdi lokasi : "<<mid; cout<<"pencarian gagal..."; tanya(); void fibonacci_search() system("cls"); cout<<"\n\nfibonanci search ini mengunakan jumlah data sebanyak 10"<<endl<<endl; cin>>n; for(j=1;j<=n;j++) cout<<"masukan data ke "<<j<<"= "; cin>>nilai[j]; for(j=1;j<=n;j++) for(y=j+1;y<=n;y++) if(nilai[j]>nilai[y]) temp=nilai[j]; nilai[j]=nilai[y]; nilai[y]=temp; cout<<"\n\nurutan Ascending data :\n"; for(j=1;j<=n;j++) 6

178 cout<<nilai[j]<<" "; cout<<endl; /* a=10+1; k=2; while(a<=n) Fib[k]=Fib[k-2]+Fib[k-1]; if(fib[k]==a) Fib[k]=k-1; Fk=Fib[k]; cout<<fib[k]<<" "; k++; */ Fib[0]=0; Fib[1]=1; k=0; cout<<"baris Fibonaci terdekat dengan data :"; while(fib[k]<=n+1) if(k>0) Fib[k+1]=Fib[k]+Fib[k-1]; cout<<fib[k]<<" "; k++; cout<<endl<<"jumlah data fibonaci = "<<k--<<endl; Fk=Fib[k]; cout<<"nilai Fk = "<<Fk<<endl; i=fib[k-1]; p=fib[k-2]; q=fib[k-3]; m=n-fk+1; cout<<"i="<<i<<endl<<"p="<<p<<endl<<"q="<<q<<endl<<"m="<<m<<endl; cout<<"\nmasukan data yang ingin dicari = "; cin>>x; if(x>nilai[i]) i=i+m; while(i!=0) if(x<nilai[i]) if(q==0) i=0; cout<<"data tidak ditemukan!!"; break; i=i-q; t=p; p=q; 7

179 q=t-q; else if(x==nilai[i] i==9 i==10) cout<<"data yang dicari ditemukan pada lokasi ke "<<i<<endl; break; else if(x>nilai[i]) if(p==1) i=0; cout<<"data tidak ditemukan!!"; break; i=i+q; p-=q; q-=p; tanya(); void linear_sort() system("cls"); cout<<"\n\nmasukan jumlah data : "; cin>>n; for(i=1;i<=n;i++) cout<<"nilai ["<<i<<"] : "; cin>>nilai[i]; cout<<"\n\nmetode sorting?"; cout<<"\n A :Ascending"; cout<<"\n D :Descending"; cout<<"\npilihan Anda : "; cin>>jawab; if(jawab=='a' jawab=='a') for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(nilai[i]>nilai[j]) temp=nilai[i]; nilai[i]=nilai[j]; nilai[j]=temp; cout<<"\n\nurutan Ascending data :\n"; 8

180 for(i=1;i<=n;i++) cout<<nilai[i]<<" "; else if(jawab=='d' jawab=='d') for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(nilai[i]<nilai[j]) temp=nilai[i]; nilai[i]=nilai[j]; nilai[j]=temp; cout<<"\n\nurutan Descending data :\n"; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; else salah(); linear_sort(); tanya(); void bubble_sort() int exc,loop,j=1; system("cls"); cout<<"\n\nmasukan jumlah data : "; cin>>n; for(i=1;i<=n;i++) cout<<"nilai ["<<i<<"] : "; cin>>nilai[i]; cout<<"\n\nmetode sorting?"; cout<<"\n A :Ascending"; cout<<"\n D :Descending"; cout<<"\npilihan Anda : "; cin>>jawab; cout<<endl<<endl; if(jawab=='a' jawab=='a') for(loop=1;loop<=n;loop++) cout<<"looping ke : "<<loop; cout<<endl; exc=0; for(j=1;j<n;j++) 9

181 if(nilai[j]>nilai[j+1]) swap(nilai[j],nilai[j+1]); exc++; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; cout<<endl; if(exc==0) cout<<"tidak ada eksekusi berlangsung...\n"; cout<<"akhir looping ke : "<<loop; cout<<"\n \n\n"; getch(); cout<<"\n\nurutan Ascending data :\n"; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; else if(jawab=='d' jawab=='d') for(loop=1;loop<=n;loop++) cout<<"looping ke : "<<loop; cout<<endl; exc=0; for(j=1;j<n;j++) if(nilai[j]<nilai[j+1]) swap(nilai[j],nilai[j+1]); exc++; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; cout<<endl; if(exc==0) cout<<"\ntidak ada eksekusi berlangsung...\n"; else cout<<"akhir looping ke : "<<loop; cout<<"\n \n\n"; getch(); cout<<"\n\nurutan Descending data :\n"; for(i=1;i<=n;i++) cout<<nilai[i]<<" "; salah(); bubble_sort(); 10

182 tanya(); void swap(int &value1,int &value2) int holdvalue=value1; value1=value2; value2=holdvalue; void tanya() cout<<"\n\nprogram telah selesai"; cout<<"\nanda ingin mengulang? Y/N : "; cin>>jawab; if(jawab=='y' jawab=='y') menu(); else if(jawab=='n' jawab=='n') cout<<setw(50)<<"\n\n\t========================="; cout<<setw(50)<<"\n\t Searching And Sorting "; cout<<setw(50)<<"\n\t "; cout<<setw(50)<<"\n\t Oleh : "; else cout<<setw(50)<<"\n\t========================="; cout<<setw(50)<<"\n\t Universitas Mercubuana\n"; salah(); tanya(); void salah() cout<<"\n\n\tfatal Error"; cout<<"\n\tinput unrecognized"; cout<<"\n\tsystem back to the last action"; cout<<"\n\tpress any key to continue..."; getch(); Tree #include <stdio.h> #include <conio.h> typedef struct Node int data; Node *kiri; Node *kanan; ; void tambah(node **root,int databaru) if((*root) == NULL) Node *baru; 11

183 baru = new Node; baru->data = databaru; baru->kiri = NULL; baru->kanan = NULL; (*root) = baru; (*root)->kiri = NULL; (*root)->kanan = NULL; printf("data bertambah!"); else if(databaru < (*root)->data) tambah(&(*root)->kiri,databaru); else if(databaru > (*root)->data) tambah(&(*root)->kanan,databaru); else if(databaru == (*root)->data) printf("data sudah ada!"); void preorder(node *root) if(root!= NULL) printf("%d ",root->data); preorder(root->kiri); preorder(root->kanan); void inorder(node *root) if(root!= NULL) inorder(root->kiri); printf("%d ",root->data); inorder(root->kanan); void postorder(node *root) if(root!= NULL) postorder(root->kiri); postorder(root->kanan); printf("%d ",root->data); void main() int pil,c; Node *pohon,*t; pohon = NULL; do clrscr(); int data; printf("menu\n"); printf("1. Tambah\n"); printf("2. Lihat pre-order\n"); printf("3. Lihat in-order\n"); printf("4. Lihat post-order\n"); printf("5. Exit\n"); 12

184 printf("pilihan : "); scanf("%d",&pil); switch(pil) case 1: printf ("Data baru : "); scanf("%d",&data); tambah(&pohon,data); break; case 2: if(pohon!=null) preorder(pohon); else printf("masih kosong!"); break; case 3: if(pohon!=null) inorder(pohon); else printf("masih kosong!"); break; case 4: if(pohon!=null) postorder(pohon); else printf("masih kosong!"); break; getch(); while(pil!=5); Output Program Tambah Data: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 5 Data Bertambah MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 2 Data Bertambah MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : 1 Data baru : 3 Data Bertambah MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 13

185 5. Exit Pilihan : 1 Data baru : 8 Data Bertambah Output Program Pre -Order: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : Output Program In-Order: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : Output Program Post-Order: MENU 1. Tambah 2. Lihat pre-order 3. Lihat in-order 4. Lihat post-order 5. Exit Pilihan : Daftar Pustaka 1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4 14

STRUKTUR DATA Pertemuan 1 s.d 8

STRUKTUR DATA Pertemuan 1 s.d 8 STRUKTUR DATA Pertemuan 1 s.d 8 Sasaran: Meningkatkan: pemahaman pengetahuan tentang teori dasar struktur data dan penanganan data serta pembuatan algoritma dan penggunaan strukturd dalam pemrograman Materi

Lebih terperinci

STRUKTUR DATA Pertemuan 1 s.d 8

STRUKTUR DATA Pertemuan 1 s.d 8 STRUKTUR DATA Pertemuan 1 s.d 8 Sasaran: Meningkatkan: pemahaman pengetahuan tentang teori dasar struktur data dan penanganan data serta pembuatan algoritma dan penggunaan strukturd dalam pemrograman Materi

Lebih terperinci

1. Tipe Data Sederhana Hanya dimungkinkan untuk menyimpan sebuah nilai data dalam sebuah variabel Ada 5 macam : int, float, double, char, boolen

1. Tipe Data Sederhana Hanya dimungkinkan untuk menyimpan sebuah nilai data dalam sebuah variabel Ada 5 macam : int, float, double, char, boolen Pokok Bahasan Pengantar Struktur Data Pengertian Struktur Data Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa dipakai secara efisien Sedangkan data adalah representasi

Lebih terperinci

Tipe Data dan Operator

Tipe Data dan Operator Tipe Data dan Operator Dasar Algoritma dan Pemrogrman Eka Maulana, ST, MT, MEng. Klasifikasi Tipe Data 1 Tipe Data Tipe data adalah jenis data yang dapat diolah oleh komputer untuk memenuhi kebutuhan dalam

Lebih terperinci

Linked List 6.3 & 7.3 NESTED LOOP

Linked List 6.3 & 7.3 NESTED LOOP Linked List 6.3 & 7.3 NESTED LOOP 1 Linked List ( List yang di-link satu dengan lainnya ) 2 apa itu List? 3 Contoh sebuah LIST int A[5]; 0 1 2 3 4 Array satu dimensi Disebut juga : Vector Kadang-kadang

Lebih terperinci

Integer (Bilangan Bulat) Yang dimaksud bilangan bulat adalah, -1, -2, -3, 0, 1, 2, 3, 4 dan lain lain yang bukan merupakan bilangan pecahan.

Integer (Bilangan Bulat) Yang dimaksud bilangan bulat adalah, -1, -2, -3, 0, 1, 2, 3, 4 dan lain lain yang bukan merupakan bilangan pecahan. Struktur Data Struktur Data Setiap data memiliki tipe data, apakah merupakan angka bulat, angka pecahan, atau berupa karakter, dan sebagainya. Jadi, tipe data adalah pengelompokan data berdasarkan isi

Lebih terperinci

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pertemuan 1 STRUKTUR DATA Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang

Lebih terperinci

BAB 5 PERULANGAN DAN ARRAY

BAB 5 PERULANGAN DAN ARRAY Bab 5 Perulangan dan Array 66 BAB 5 PERULANGAN DAN ARRAY TUJUAN PRAKTIKUM 1. Praktikan mengerti apa yang dimaksud dengan perulangan 2. Praktikan mengerti apa yang dimaksud dengan seleksi kondisi 3. Praktikan

Lebih terperinci

Turbo C adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C

Turbo C adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C 1. Pendahuluan Lingkungan Turbo C++ 4.5 Turbo C++ 4.5 adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C++ 4.5. 1 2 3 4 1 : Menu Utama

Lebih terperinci

(3) BAHAN KAJIAN (materi ajar)

(3) BAHAN KAJIAN (materi ajar) FAKULTAS TEKNOLOGI KOMUNIKASI DAN INFORMATIKA UNIVERSITAS NASIONAL RENCANA PEMBELAJARAN Matakuliah : Konsep Struktur Data Semester : Genap Kode : 08010305 SKS : 2 Jurusan : Manajemen Informatika Dosen

Lebih terperinci

Pertemuan 2 ARRAY DIMENSI 1 & 2

Pertemuan 2 ARRAY DIMENSI 1 & 2 Pertemuan 2 ARRAY DIMENSI 1 & 2 Array atau Larik merupakan Struktur Data Sederhana yang dapat didefinisikan sebagai pemesanan alokasi memory sementara pada komputer. Array dapat didefinisikan sebagai suatu

Lebih terperinci

Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut

Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut Kisi-Kisi Ujian Tengah Semester Algoritma dan Pemrograman Lanjut 1. Pengenalan Bahasa C++ a. Elemen Bahasa C+ Bahasa C++ ditulis dari beberapa elemen, antara lain: Pernyataan Satu atau beberapa ekspresi

Lebih terperinci

Langkah Mudah Belajar Struktur Data Menggunakan C/C++

Langkah Mudah Belajar Struktur Data Menggunakan C/C++ Langkah Mudah Belajar Struktur Data Menggunakan C/C++ Sanksi Pelanggaran Pasal 113 Undang-Undang Nomor 28 Tahun 2014 tentang Hak Cipta 1. Setiap Orang yang dengan tanpa hak melakukan pelanggaran hak ekonomi

Lebih terperinci

Pertemuan 7. REVIEW dan QUIS

Pertemuan 7. REVIEW dan QUIS Pertemuan 7 REVIEW dan QUIS 1. Type data dibawah ini, yang tidak termasuk dalam tipe data sederhana tunggal, adalah : a. Boolean d. Integer b. String e. float c. Char 2. ==, =,!=, termasuk dalam operator

Lebih terperinci

ARRAY DIMENSI 1 & 2. Array dapat didefinisikan sebagai suatu himpunan hingga elemen yang terurut dan homogen.

ARRAY DIMENSI 1 & 2. Array dapat didefinisikan sebagai suatu himpunan hingga elemen yang terurut dan homogen. Pertemuan 2 ARRAY DIMENSI 1 & 2 Array atau Larik merupakan Struktur Data Sederhana yang dapat didefinisikan sebagai pemesanan alokasi memory sementara pada komputer. Array dapat didefinisikan sebagai suatu

Lebih terperinci

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( )

MAKALAH STRUKTUR DATA. DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH ( ) MAKALAH STRUKTUR DATA DOSEN PEMBIMBING Nisa miftachurohmah, S.kom., M.Si PENYUSUN SITI JAMILATUL MU ADDIBAH (14.1.03.03.0024) FAKULTAS TEKNIK PROGRAM STUDI SISTEM INFORMASI UNIVERSITAS NUSANTARA PGRI KEDIRI

Lebih terperinci

Achmad Solichin.

Achmad Solichin. Pemrograman Bahasa C dengan Turbo C [email protected] Lisensi Dokumen: Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit),

Lebih terperinci

Lab. Teknik Informatika Struktur Data 1

Lab. Teknik Informatika Struktur Data 1 2. POINTER dan SINGLE LINK LIST TUJUAN PRAKTIKUM 1. Praktikan mengetahui tipe struktur data baru yaitu tipe data Pointer. 2. Praktikan menggunakan pointer didalam pembuatan program dan dapat menerapkannya

Lebih terperinci

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer PERTEMUAN VI POINTER 6.1 Tujuan Praktikum Praktikan mengenal type data Pointer, mengerti tentang konsep dasar dari pointer, dapat mendeklarasikan pointer di Pascal serta dapat menggunakannya di dalam sebuah

Lebih terperinci

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009 SOAL C++ 1. Penulisan Preprocessor yang benar di awali dengan tanda pound atau tanda : a. # c. @ b. & d. = 2. Contoh penulisan file header yang benar yaitu : a. &include c. =include

Lebih terperinci

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2 VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI Tujuan Pembelajaran 1. Siswa mampu memahami penulisan Tipe data, variabel dan konstanta dalam pascal 2. Siswa mampu menerapkan penggunaan Tipe data,

Lebih terperinci

Algoritma Dan Struktur Data II

Algoritma Dan Struktur Data II Algoritma Dan Struktur Data II Array dan Matriks Apa itu Struktur Data? PROGRAM ALGORITMA STRUKTUR DATA Algoritma.. deskripsi langkah-langkah penyelesaian masalah yang tersusun secara logis 1. ditulis

Lebih terperinci

VARIABEL, TIPE DATA DAN EKSPRESI Bab 2

VARIABEL, TIPE DATA DAN EKSPRESI Bab 2 VARIABEL, TIPE DATA DAN EKSPRESI Bab 2 2.1 IDENTIFIER Indentifier adalah nama yang diberikan untuk nama objek, nama fungsi, nama variable, dll ( sifatnya case sensitive ). Identifier pada C++ terdiri dari

Lebih terperinci

Silabus Struktur Data. Bandung 2013

Silabus Struktur Data. Bandung 2013 Silabus Struktur Data Bandung 2013 Silabus u Menjelaskan Varian dan Invarian u Membuat Alur Logika pemrograman u Menerapkan Pengelolaan Array u Memelihara Pekerjaan secara prakds u Menerapkan konsep data

Lebih terperinci

MATERI PRAKTIKUM STRUKTUR DATA

MATERI PRAKTIKUM STRUKTUR DATA MATERI PRAKTIKUM STRUKTUR DATA Materi pembelajaran struktur data selama satu semester meliputi: No Materi Umum Tujuan yang diharapkan 1 Pengertian Struktur Data, Tipe Data Mahasiswa dapat Memahami dan

Lebih terperinci

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR 1 PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR Siti Mukaromah, S.Kom TEKNIK PENYAJIAN ALGORITMA Teknik Tulisan Structure English Pseudocode Teknik Gambar Structure Chart HIPO Flowchart 2 PSEUDOCODE Kode

Lebih terperinci

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN I. Elemen-Elemen Dalam Bahasa Pemrograman Berikut adalah elemen-elemen pada bahasa pemrograman: Berikut adalah element-element pada bahasa pemrograman: 1. Aturan

Lebih terperinci

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list Universitas Muhammadiyah Sukabumi Artikel Struktur Data Oleh : fahmi fauzi Masukan Judul... 1. STACK DAN QUEUE DENGAN LINKED LIST Pengertian Linked list : sekumpulan elemen bertipe sama, yang mempunyai

Lebih terperinci

Struktur Data Array. Rijal Fadilah S.Si

Struktur Data Array. Rijal Fadilah S.Si Struktur Data Array Rijal Fadilah S.Si Array Berdimensi Satu Array Satu dimensi tidak lain adalah kumpulan elemen-elemen identik yang tersusun dalam satu baris. Elemen-elemen tersebut memiliki tipe data

Lebih terperinci

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD

Struktur Data. Tumpukan : Definisi & Operasi. Pertemuan 4 PROBLEM ALGORITHM DATA IMPLEMENTATION. Pert. 4b Struktur Data - FMIPA USD Pertemuan 4 : Definisi & Operasi Disusun oleh : PH. Prima Rosa, S.Si., M.Sc. Sri Hartati Wijono, S.Si. 2003/2004 Pert. 4b Struktur Data - FMIPA USD - 2003 Hal. 1 Struktur Data PROBLEM ALGORITHM DATA IMPLEMENTATION

Lebih terperinci

Algoritma Pemrograman & Struktur Data

Algoritma Pemrograman & Struktur Data MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Stack Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Fakultas Ilmu Informatika Komputer 04 87042 Abstract Penjelasan mengenai stack dan penggunaannya

Lebih terperinci

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pertemuan 1 STRUKTUR DATA Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang

Lebih terperinci

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pertemuan 1 STRUKTUR DATA Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang

Lebih terperinci

LIST. Dewi Sartika, M.Kom

LIST. Dewi Sartika, M.Kom LIST PENDAHULUAN Linked List adalah sejumlah objek yang dihubungkan (linked) satu dengan yang lainnya membentuk suatu list. Objek adalah gabungan dari beberapa data (variable) yang dijadikan satu kelompok

Lebih terperinci

Pertemuan 2 ARRAY DIMENSI 1 & 2

Pertemuan 2 ARRAY DIMENSI 1 & 2 Pertemuan 2 ARRAY DIMENSI 1 & 2 Definisi Array Array / Larik : Struktur Data Sederhana yang dapat didefinisikan sebagai pemesanan alokasi memory sementara pada komputer. Array dapat didefinisikan sebagai

Lebih terperinci

Struktur Data. PDE - Struktur Data 1

Struktur Data. PDE - Struktur Data 1 Struktur Data Copyright@Ihsan Jatnika PDE - Struktur Data 1 Objektif Mengetahui maksud struktur data dan menjelaskan penggunaannya dalam pemrograman Mengetahui operasi yang terkait dengan struktur data

Lebih terperinci

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS

STRUKTUR DATA. By : Sri Rezeki Candra Nursari 2 SKS STRUKTUR DATA By : Sri Rezeki Candra Nursari 2 SKS Penilaian : Gasal TA 2013/2014 UAS = 35% UTS = 30% ABSEN = 5% TUGAS = 30% Jumlah = 100% Tugas kirim ke : [email protected] Batas Tugas 9 hari setelah

Lebih terperinci

STRUKTUR DATA. Literatur

STRUKTUR DATA. Literatur STRUKTUR DATA By : Sri Rezeki Candra Nursari 2 SKS Literatur Sjukani Moh, (2007), Struktur Data (Algoritma & Struktur Data 2) dengan C, C++, Mitra Wacana Media Utami Ema dkk, (2007), Struktur Data (Konsep

Lebih terperinci

Tipe bentukan dan pointer selanjutnya akan kita pelajari pada modul pemrograman 1 (akhir semester).

Tipe bentukan dan pointer selanjutnya akan kita pelajari pada modul pemrograman 1 (akhir semester). TIPE DATA Penggunaan tipe data pada bahasa c++ erat kaitannya dengan penggunaan memori, perlu diperhatikan dalam penggunaanya. Terdapat tiga tipe data dalam bahasa C++ yaitu : 1. Tipe Data Dasar terdiri

Lebih terperinci

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus.

2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus. 1 ARRAY & LINKED LIST MODUL 1 Standar kompetensi: 1. Mahasiswa mengetahui perbedaan array dan linked list. 2. Mahasiswa dapat membuat dan menggunakan array dan linked list dalam suatu kasus. 3. Mahasiswa

Lebih terperinci

elemen Dasar Bahasa Pemrograman C

elemen Dasar Bahasa Pemrograman C Elemen-elemen elemen Dasar Bahasa Pemrograman C Algoritma dan Pemrograman Tahar Agastani Teknik Informatika UIN - 2008 Identifier : Elemen Dasar C Nama pengenal (identifier) adalah nama-nama yang ditentukan

Lebih terperinci

Pendahuluan Struktur Data. Nisa ul Hafidhoh

Pendahuluan Struktur Data. Nisa ul Hafidhoh Pendahuluan Struktur Data Nisa ul Hafidhoh [email protected] 08156114760 Tujuan Mahasiswa dapat melakukan pemrograman dalam skala menengah dengan memanfaatkan struktur data internal yang kompleks dan

Lebih terperinci

Modul Praktikum Algoritma dan Struktur Data

Modul Praktikum Algoritma dan Struktur Data MODUL IV STACK A. TUJUAN 1. Memahami terminologi yang terkait dengan struktur data stack. 2. Memahami operasi-operasi yang ada dalam stack. 3. Dapat mengidentifikasi permasalahan-permasalahan pemrograman

Lebih terperinci

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs. Algoritma dan Struktur Data Ramos Somya, S.Kom., M.Cs. Penggunaan record dalam jumlah yang banyak alokasi memory konvensional tidak bisa diandalkan. Misal kita akan bekerja dengan file yang menyimpan sangat

Lebih terperinci

LAPORAN PRAKTIKUM RESMI QUEUE

LAPORAN PRAKTIKUM RESMI QUEUE LAPORAN PRAKTIKUM RESMI QUEUE Disusun oleh : Amin Setyaningrum 201301052 Dosen pengampu : Yosef Murya Kusuma Ardhana.S.T., M.Kom JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO PURWOKERTO

Lebih terperinci

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom Pengantar Bahasa Pemrograman Pascal Page 1 / 11 Pengenalan Pascal Pascal merupakan salah satu bahasa pemrograman tingkat tinggi. Pemrograman

Lebih terperinci

Algoritma Pemrograman & Struktur Data

Algoritma Pemrograman & Struktur Data MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Array Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Fakultas Ilmu Informatika Komputer 02 87042 Abstract Penjelasan mengenai array dan penggunaannya

Lebih terperinci

Pert 2 Struktur Data (mengajarkomputer.wordpress.com) ARRAY DIMENSI 1 & 2

Pert 2 Struktur Data (mengajarkomputer.wordpress.com) ARRAY DIMENSI 1 & 2 ARRAY DIMENSI 1 & 2 Array / Larik : Struktur Data Sederhana yang dapat didefinisikan sebagai pemesanan alokasi memory sementara pada komputer. Array dapat didefinisikan sebagai suatu himpunan hingga elemen

Lebih terperinci

TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C

TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C WAHJUDI ULTIMATICS VOL. 1 NO. 1, DESEMBER 2009 TIPE DATA ABSTRAK MENGGUNAKAN BAHASA C Universitas Multimedia Nusantara Tangerang - Banten Januar Wahjudi Abstrak- Tipe data abstrak(abstract data types atau

Lebih terperinci

MODUL IV STACK A. TUJUAN

MODUL IV STACK A. TUJUAN MODUL IV STACK A. TUJUAN 1. Memahami terminologi yang terkait dengan struktur data stack. 2. Memahami operasi-operasi yang ada dalam stack. 3. Dapat mengidentifikasi permasalahan-permasalahan pemrograman

Lebih terperinci

TIPE DATA, VARIABLE, dan OPERATOR DELPHI

TIPE DATA, VARIABLE, dan OPERATOR DELPHI TIPE DATA, VARIABLE, dan OPERATOR DELPHI A. TIPE DATA Delphi merupakan bahasa pemrograman tingkat tinggi yang mendukung perancangan terstruktur dan berorientasi Object. Bahasa pemrograman ini berdasarkan

Lebih terperinci

Struktur Bahasa C dan C++

Struktur Bahasa C dan C++ Elemen Program Struktur Bahasa C dan C++ Bahasa C merupakan bahasa pendahulu dari bahasa C++. Pencipta C adalah Brian W. Kernighan dan Dennis M. Ritchie pada sekitar tahun 1972. C adalah bahasa pemrograman

Lebih terperinci

STRUKTUR DATA MENGGUNAKAN C++ Windha Mega PD, S.Kom

STRUKTUR DATA MENGGUNAKAN C++ Windha Mega PD, S.Kom STRUKTUR DATA MENGGUNAKAN C++ Windha Mega PD, S.Kom DASAR PEMROGRAMAN C++ Bahasa C++ adalah bahasa yang menggunakan kompiler untuk translator dari kode program menjadi bahasa mesin. Bahasa C++ mempunyai

Lebih terperinci

Cara pertama adalah pada saat deklarasi variabel ditambahkan ke- yword const sebelum nama tipe data seperti

Cara pertama adalah pada saat deklarasi variabel ditambahkan ke- yword const sebelum nama tipe data seperti KONSTANTA Menghitung besaran-besaran fisis dalam bidang fisika memerlukan suatu konstantakonstanta. Bahasa C dan C++ menyediakan tipe data tambahan sehingga variabel yang kita gunakan merupakan konstanta

Lebih terperinci

MATERI/BAHAN PRAKTIKUM PENDAHULUAN DAN PENGENALAN (IDENTIFIER)

MATERI/BAHAN PRAKTIKUM PENDAHULUAN DAN PENGENALAN (IDENTIFIER) MATERI/BAHAN PRAKTIKUM PENDAHULUAN DAN PENGENALAN (IDENTIFIER) I. TUJUAN 1. Mahasiswa mengenal struktur bahasa pemrograman C dan C++ 2. Mahasiswa mengenal perintah-perintah dasar C dan C++ 3. Mahasiswa

Lebih terperinci

MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PERTEMUAN 1

MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PERTEMUAN 1 MODUL PRAKTIKUM ALGORITMA DAN STRUKTUR DATA PERTEMUAN 1 Disusun oleh : Tim Asisten JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SUNAN KALIJAGA YOGYAKARTA 2011 0 A. Pengantar

Lebih terperinci

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN

PERTEMUAN 2 ALGORITMA & PEMROGRAMAN PERTEMUAN 2 ALGORITMA & PEMROGRAMAN POKOK BAHASAN 1. Pendahuluan 2. Tahapan Pembangunan Program 3. Pengenalan Algoritma 4. Cara Menyajikan Algoritma 5. Data Program 6. Elemen-Elemen Program PENDAHULUAN

Lebih terperinci

03 LINKED LIST. Slide 0 voice. Slide 1 voice. Slide 2 voice. Thompson Susabda Ngoen 1 P a g e

03 LINKED LIST. Slide 0 voice. Slide 1 voice. Slide 2 voice. Thompson Susabda Ngoen 1 P a g e 03 LINKED LIST Slide 0 voice Pada perkuliahan ini kita akan membahas topik linked list atau senarai berkait. Slide 1 voice Terdapat tujuh bilangan bulat yang nilainya terurut secara menaik (ascending)

Lebih terperinci

PERTEMUAN 7 REVIEW (QUIZ)

PERTEMUAN 7 REVIEW (QUIZ) PERTEMUAN 7 REVIEW (QUIZ) 1. Langkah pertama yang harus dilakukan dalam menyusun suatu program a. Membuat Hipotesa b. Membuat Masalah c. Membuat Algoritma d. Membuat Program e. Menyalakan Komputer 2. Sebuah

Lebih terperinci

BAHASA PEMROGRAMAN C

BAHASA PEMROGRAMAN C BAHASA PEMROGRAMAN C A. Pengenalan Bahasa C diciptakan oleh Dennis Ritchie tahun 1972 di Bell Laboratories. Kelebihan Bahasa C: - Bahasa C tersedia hampir di semua jenis computer. - Kode bahasa C sifatnya

Lebih terperinci

STRUKTUR DATA. Pengajar. Jaidan Jauhari, M.T. Alamat

STRUKTUR DATA. Pengajar. Jaidan Jauhari, M.T. Alamat STRUKTUR DATA Pengajar Jaidan Jauhari, M.T. Alamat Email [email protected] [email protected] Disarikan Dari Berbagai Sumber, Terutama Dari Diktat Struktur Data Informatika ITB Karangan Dr. Inggriani

Lebih terperinci

Tabel Informasi. Hal di atas dapat dilakukan dengan menambah dan mengambil atribut identifier yang digunakan pada program, melalui tabel informasi.

Tabel Informasi. Hal di atas dapat dilakukan dengan menambah dan mengambil atribut identifier yang digunakan pada program, melalui tabel informasi. Tabel Informasi Tabel informasi atau tabel simbol berguna untuk mempermudah pada saat pembuatan dan implementasi dari analisa semantik (semantic analyzer). Pada proses translasi, tabel informasi dapat

Lebih terperinci

Keg. Pembelajaran 2 : Mengenal Bahasa C++

Keg. Pembelajaran 2 : Mengenal Bahasa C++ Keg. Pembelajaran 2 : Mengenal Bahasa C++ 1. Tujuan Kegiatan Pembelajaran Setelah mempelajari materi kegiatan pembelajaran ini mahasiswa akan dapat : 1) Mengenal secara baik sintak-sintak dalam bahasa

Lebih terperinci

PENGENALAN BAHASA C DAN C++

PENGENALAN BAHASA C DAN C++ PRAKTIKUM KE 1 PENGENALAN BAHASA C DAN C++ TUJUAN PRAKTIKUM 1. Praktikan mengetahui sejarah bahasa C dan C++. 2. Praktikan mengerti struktur program bahasa C / C++. 3. Praktikan mengerti konsep tipe data

Lebih terperinci

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera

POINTER STACK DAN QUEUE. Institut Teknologi Sumatera POINTER STACK DAN QUEUE ALGORITMA DAN STRUKTUR DATA Institut Teknologi Sumatera PRE TEST Apakah yang disebut dengan array? Bagaimana cara deklarasi dan pengacuan dari sebuah array? Apa kekurangan array?

Lebih terperinci

PRAKTIKUM 2. perubah (variabel), konstanta, fungsi, atau obyek lain yang didefinisikan oleh

PRAKTIKUM 2. perubah (variabel), konstanta, fungsi, atau obyek lain yang didefinisikan oleh PRAKTIKUM 2 1. Variabel Pengenal (identifier) merupakan nama yang biasa digunakan untuk suatu perubah (variabel), konstanta, fungsi, atau obyek lain yang didefinisikan oleh pemrogram. Variabel adalah suatu

Lebih terperinci

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 STACK DAN QUEUE LABORATORIUM PEMROGRAMAN PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH MALANG 2015 I. TUJUAN II. Mahasiswa mampu

Lebih terperinci

PERTEMUAN KE 11. Linked List. Apa Itu Linked List?

PERTEMUAN KE 11. Linked List. Apa Itu Linked List? PERTEMUAN KE 11 Linked List Apa Itu Linked List? Linked list tidak lain adalah suatu struktur data yg merupakan suatu rangkaian atau daftar record berjenis sama. Kemudian dihubungkan melalui bantuan pointer.

Lebih terperinci

Operator untuk operasi aritmatika yang tergolong sebagai operator binary adalah: Perkalian Pembagian Sisa Pembagian (mod) Penjumlahan 6 2

Operator untuk operasi aritmatika yang tergolong sebagai operator binary adalah: Perkalian Pembagian Sisa Pembagian (mod) Penjumlahan 6 2 [Kristanto:2009] Operator merupakan simbol atau kata yang dapat digunakan dalam program untuk melakukan suatu operasi atau manipulasi, seperti menjumlahkan dua buah nilai, memberikan nilai kesuatu variabel,

Lebih terperinci

PEMROGRAMAN BERORIENTASI OBJEK. Tipe Data. Budhi Irawan, S.Si, M.T

PEMROGRAMAN BERORIENTASI OBJEK. Tipe Data. Budhi Irawan, S.Si, M.T PEMROGRAMAN BERORIENTASI OBJEK Tipe Data Budhi Irawan, S.Si, M.T TIPE DATA Tipe Data berfungsi untuk merepresentasikan jenis dari nilai yang terdapat dalam program. Contoh apabila mempunyai suatu data

Lebih terperinci

Algoritma dan Struktur Data. Ramos Somya

Algoritma dan Struktur Data. Ramos Somya Algoritma dan Struktur Data Ramos Somya Penggunaan record dalam jumlah yang banyak alokasi memory konvensional tidak bisa diandalkan. Misal kita akan bekerja dengan file yang menyimpan sangat banyak record,

Lebih terperinci

BAB II STACK Atau TUMPUKAN

BAB II STACK Atau TUMPUKAN BAB II STACK Atau TUMPUKAN List Linear (Daftar Linear). List linier adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya disebut simpul (node). Simpul terdiri

Lebih terperinci

MODUL PRAKTIKUM. MODUL I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman

MODUL PRAKTIKUM. MODUL I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman I - VIII Modul penuntun dan bahan praktikum matakuliah algoritma dan pemograman Jurusan Teknik Informatika Fakultas Teknik Universitas Maritim Raja Ali Haji ALGORITMA DAN PEMOGRAMAN I. ALGORITMA II. BAHASA

Lebih terperinci

Algoritma dan Struktur data

Algoritma dan Struktur data Pertemuan 2, Algoritma dan Struktur data Tenia wahyuningrum & Sisilia Thya Safitri VISI ST3 TELKOM Menjadi Perguruan Tinggi yang Unggul di Bidang Teknologi Telematika dan membentuk insan yang berkarakter

Lebih terperinci

OPERATOR BAHASA C. Obyektif : 4. Mengetahui macam-macam operator dalam Bahasa C. 5. Mengetahui dan dapat menggunakan format pada tiap tipe data..

OPERATOR BAHASA C. Obyektif : 4. Mengetahui macam-macam operator dalam Bahasa C. 5. Mengetahui dan dapat menggunakan format pada tiap tipe data.. OPERATOR BAHASA C Obyektif : 4. Mengetahui macam-macam operator dalam Bahasa C. 5. Mengetahui dan dapat menggunakan format pada tiap tipe data.. Operator adalah suatu tanda atau simbol yang digunakan untuk

Lebih terperinci

MATERI 2 JENIS-JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

MATERI 2 JENIS-JENIS DATA SEDERHANA & INPUT/OUTPUT DATA MATERI 2 JENIS-JENIS DATA SEDERHANA & INPUT/OUTPUT DATA Kata-Kata Cadangan Kata-kata cadangan (reserved words) adalah kata-kata yang sudah didefinisikan oleh Pascal yang mempunyai maksud tertentu. Kata-kata

Lebih terperinci

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri

Senarai berantai. linked list. Pertemuan keenam Struktur data st3telkom.ac.id. by : tenia wahyuningrum & Sisilia Thya Safitri Senarai berantai linked list Pertemuan keenam Struktur data st3telkom.ac.id by : tenia wahyuningrum & Sisilia Thya Safitri Senarai berantai Dalam pemakaian sehari-hari istilah senarai berantai (list) adalah

Lebih terperinci

ARRAY PENGANTAR PROGRAM STUDI. Institut Teknologi Sumatera

ARRAY PENGANTAR PROGRAM STUDI. Institut Teknologi Sumatera ARRAY PENGANTAR PROGRAM STUDI Institut Teknologi Sumatera TUJUAN PERKULIAHAN Mahasiswa memahami konsep dan cara kerja array Mahasiswa mampu membuat program sederhana menggunakan array satu dimensi PRE

Lebih terperinci

Single Linked List (1)

Single Linked List (1) Praktikum 5 Single Linked List (1) A. TUJUAN PEMBELAJARAN Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu: 1. Memahami konsep membangun single linked list 2. Memahami konsep operasi

Lebih terperinci

JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

JENIS DATA SEDERHANA & INPUT/OUTPUT DATA JENIS DATA SEDERHANA & INPUT/OUTPUT DATA 1.1 Tipe Data A. Data Tipe Sederhana Dihubungkan dengan sebuah identifier untuk sebuah data. Data tipe ini digolongkan menjadi tipe data standar dan tipe data yang

Lebih terperinci

Struktur Data. Pertemuan 2

Struktur Data. Pertemuan 2 Pertemuan 2 Tujuan Pembelajaran Mahasiswa mampu menjelaskan konsep struktur data (Pengertian Struktur data, Konsep struktur data, Tipe data sederhana, Deklarasi data dalam bahasa pemrograman. 1. Pengertian

Lebih terperinci

PEMROGRAMAN BERORIENTASI OBJEK. Operator. Budhi Irawan, S.Si, M.T

PEMROGRAMAN BERORIENTASI OBJEK. Operator. Budhi Irawan, S.Si, M.T PEMROGRAMAN BERORIENTASI OBJEK Operator Budhi Irawan, S.Si, M.T OPERATOR Operator adalah tanda yang digunakan untuk melakukan operasi operasi tertentu didalam program. Dengan adanya operator maka dapat

Lebih terperinci

TIPE, NAMA, DAN NILAI

TIPE, NAMA, DAN NILAI TIPE, NAMA, DAN NILAI Dian Palupi Rini, M.Kom Tipe Dasar Bilangan Logika Nama Tipe adalah boolean (diambil dari nama matematikawan Inggris George Boole). Ranah Nilai : true (benar) dan false (salah). Konstanta

Lebih terperinci

3. Elemen Dasar C++ S. Indriani S. L., M.T L.,

3. Elemen Dasar C++ S. Indriani S. L., M.T L., 3. Elemen Dasar C++ S. Indrianii L., M.T Himpunan karakter Suatu pengenal berupa satu atau beberapa karakter Huruf A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q

Lebih terperinci

Chapter 3.2 : Tipe, Nama dan Nilai

Chapter 3.2 : Tipe, Nama dan Nilai Mata Kuliah : Logika dan Algoritma / 4 SKS Chapter 3.2 : Tipe, Nama dan Nilai Dosen Pengasuh : Fatoni, M.M.,M.Kom. Mail : [email protected]/[email protected] Materi Yang Dipelajari Tipe Data Dasar

Lebih terperinci

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA 1 BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA IDENTIFIER Identifier adalah suatu tanda yang mewakili nama-nama variabel, method, class, dsb. Ingat : Bahasa

Lebih terperinci

Pengenalan C++ Oleh : Dewi Sartika

Pengenalan C++ Oleh : Dewi Sartika Pengenalan C++ Oleh : Dewi Sartika Pendahuluan Bahasa Pemrograman C++ merupakan bahasa tingkat menengah dimana bahasa ini didasarkan atas bahasa C, keistimewaan dari bahasa C++ adalah bahasa ini mendukung

Lebih terperinci

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI: Praktikum 7 Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: Konsep pengurutan dengan insertion sort dan selection sort Struktur data proses pengurutan Implementasi algoritma pengurutan

Lebih terperinci

PERTEMUAN V PEMROGRAMAN TERSTRUKTUR DENGAN VISUAL C Setiap bahasa C mempunyai satu fungsi dengan nama main (program utama).

PERTEMUAN V PEMROGRAMAN TERSTRUKTUR DENGAN VISUAL C Setiap bahasa C mempunyai satu fungsi dengan nama main (program utama). PERTEMUAN V PEMROGRAMAN TERSTRUKTUR DENGAN VISUAL C++ 6.0 STRUKTUR BAHASA C Setiap bahasa C mempunyai satu fungsi dengan nama main (program utama). Setiap program akan dieksekusi dimulai dari statement

Lebih terperinci

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3)

BAHASA PEMROGRAMAN 1 (PERTEMUAN 3) BAHASA PEMROGRAMAN 1 (PERTEMUAN 3) ARRAY KUMPULAN SOAL LATIHAN PREPARED BY CHANDRA 092110187 05 06 2010 (REVISED) PENGENALAN ARRAY Array dari Pesawat Array dari Serangga Array dari Kartu Array dari Karakter

Lebih terperinci

REVIEW ARRAY. Institut Teknologi Sumatera

REVIEW ARRAY. Institut Teknologi Sumatera REVIEW ARRAY DASAR PEMROGRAMAN Institut Teknologi Sumatera TUJUAN PERKULIAHAN Mahasiswa mengingat kembali konsep dan cara kerja array Mahasiswa mampu membuat program menggunakan array PRE TEST Tuliskan,

Lebih terperinci

DASAR PEMROGRAMAN. Institut Teknologi Sumatera

DASAR PEMROGRAMAN. Institut Teknologi Sumatera DASAR PEMROGRAMAN REVIEW STRUKTUR DASAR, PERCABANGAN, DAN PERULANGAN Institut Teknologi Sumatera TUJUAN KULIAH Mengenalkan konsep dasar pemrograman: dekomposisi problem, modularisasi, rekurens; skill/praktek

Lebih terperinci

KONSEP POINTER DAN LINKED LIST

KONSEP POINTER DAN LINKED LIST Pertemuan 3 KONSEP POINTER DAN LINKED LIST Untuk mengolah data yang banyaknya tidak bisa ditentukan sebelumnya, maka disediakan satu fasilitas yang memungkinan untuk menggunakan suatu perubah yang disebut

Lebih terperinci

Algoritma dan Pemrograman

Algoritma dan Pemrograman Algoritma dan Pemrograman bagian 2 2009 Modul ini menjelaskan tentang bahasa C dan apa saja yang dibutuhkan bila kita akan menulis suatu program dengan bahasa C. Editor yang dipakai adalah Turbo C++ 4.5.

Lebih terperinci

P 4 Bab 3 : Dasar Pemrograman C

P 4 Bab 3 : Dasar Pemrograman C Kampus II, Jl. Jembatan Merah, Nomor.C. Gejayan, Yogyakarta, Telp: (0), Fax (0) 00 P Bab : Dasar Pemrograman C. Tujuan Mahasiswa mampu mengetahui dan memahami identifier, keyword, variable, tipe data,

Lebih terperinci

Algoritma dan Pemrograman. Pertemuan Ke-4 Konsep Tipe Data, Operator Dan Identifier

Algoritma dan Pemrograman. Pertemuan Ke-4 Konsep Tipe Data, Operator Dan Identifier Algoritma dan Pemrograman Pertemuan Ke-4 Konsep Tipe Data, Operator Dan Identifier Disusun Oleh : Wilis Kaswidjanti, S.Si.,M.Kom. Jurusan Teknik Informatika Fakultas Teknologi Industri Universitas Pembangunan

Lebih terperinci

Algoritma Pemrograman & Struktur Data

Algoritma Pemrograman & Struktur Data MODUL PERKULIAHAN Algoritma Pemrograman & Struktur Data Linked List Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh Fakultas Ilmu Informatika Komputer 03 87042 Abstract Penjelasan mengenai linked

Lebih terperinci

3. Struktur Perulangan dalam C++

3. Struktur Perulangan dalam C++ 3. Struktur Perulangan dalam C++ Obyektif Praktikum : Mengerti struktur perulangan dalam C++ Dapat menggunakan struktur perulangan berdasarkan penggunaannya Struktur perulangan (loops) Loops merupakan

Lebih terperinci

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP)

GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP) Mata : Algoritma dan Struktur Data I Bobot Mata : 3 Sks GARIS-GARIS BESAR PROGRAM PENGAJARAN (GBPP) Deskripsi Mata : Pengertian algoritma, program dan bahasa pemograman serta kaitannya dengan komputer,

Lebih terperinci

PERTEMUAN 2 KONSEP DASAR PEMROGRAMAN

PERTEMUAN 2 KONSEP DASAR PEMROGRAMAN PERTEMUAN 2 KONSEP DASAR PEMROGRAMAN I. Algoritma Pemrograman Yang Baik Ciri-ciri algoritma pemrograman yang baik adalah: 1. Memiliki logika perhitungan/metode yang tepat dalam memecahkan masalah 2. Menghasilkan

Lebih terperinci