• Tidak ada hasil yang ditemukan

Algoritma Pemrograman & Struktur Data

N/A
N/A
Protected

Academic year: 2021

Membagikan "Algoritma Pemrograman & Struktur Data"

Copied!
185
0
0

Teks penuh

(1)

     

MODUL PERKULIAHAN

   

Algoritma

Pemrograman &

Struktur Data

     

Pertemuan 1

PENDAHULUAN

           

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

  Ilmu Komputer  Teknik Informatika 

01

87031  Tim Dosen         

Abstract 

Kompetensi 

   

Membahas tentang konsep dasar dari algoritma dan struktur data

 

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

(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

BIT

KAWASAN KETERANGAN

Char  8 -128 s/d 127 Karakter

Int 16 -32768 s/d 32767 Bil Integer

Float 32 3.4E-38 s/d 3.4E+38 Bil real Presisi Tunggal

Double 64 1.7E-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

(4)

TIPE DATA TERSTRUKTUR

Adalah tipe dimana suatu variabel bisa menyimpan lebih dari sebuah nilai data. Masing-masing 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

(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.

(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

(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)

(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 elemen-elemen 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)

(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.

(10)

Latihan Soal

Buatlah algoritma sebagai berikut :

1. Menampilkan deret 1 3 5 7 9

2. Menampilkan deret 5 10 15 20 25 30

3. Menampilkan deret 100 ….. 0

4. Menampilkan deret bilangan prima 1 – 100 5. Menampilkan deret 1 2 3 4 5 6 7 8 9 10

DaftarPustaka

1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, 2004

2. Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, 2004

3. Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, 2004

4. Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, 2002 5. Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4

(11)

     

MODUL PERKULIAHAN

   

Algoritma

Pemrograman &

Struktur Data

     

Pertemuan 2

ARRAY

           

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

  Ilmu Komputer  Teknik Informatika 

02

87031  Tim Dosen         

Abstract 

Kompetensi 

   

Membahas tentang konsep dari array satu dimensi hingga array multidimensi

 

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[ -3 . . 8 ], setiap elemen terdiri dari 4 byte. Jika alamat elemen pertama @A[ -3 ] = 1000 H ditanya :

(13)

A. Jumlah Elemen

B. Jumlah Byte Seluruhnya C. Alamat A[7] atau ditulis @A[7] Jawab :

Di ilustrasikan sebuah Array sebagai berikut:

1 2 3 4 5 6 7 8 9 10 11 12

-3 -2 -1 0 1 2 3 4 5 6 7 8

1 2 3 4

Setiap elemen 4 Byte

@A[-3] = 1000 H maka @A[-2] = 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. Alamat @A[ 7 ] =

Dari @A[-3] berpindah/bergerak ke @A[7] = 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 Jadi @A[7] = 1000 H + 28 H

(14)

Pendeklarasian A[ - 3 . . 8 ] 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

0 1 2 3 4 5 6 7

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)

(15)

Diketahui suatu Array dua dimensi yang dideklarasikan dengan A[ -1 .. 2 , 3 .. 8 ] Setiap elemen terdiri dari 4 Byte.

Alamat elemen pertama @A[-1,3] = 1000 H atau @A[-1,3] = 1000 H

Ditanya :

A. Jumlah Elemen

B. Jumlah Byte Seluruhnya C. Alamat A[2,5] atau @A[2,5] ?

Jika penempatan memori menggunakan : C1. Row Major Order

C2. Column Major Order

Jawab .

Di ilustrasikan sebuah Array sebagai berikut:

@A[-1,3] = 1000 H 3 4 5 6 7 8 -1 A B C D E F 0 G H I J K L 1 M N O P Q R 2 S T U V W X @A[2,5] = ?.

Pada Array 2 Dimensi yang diilustrasikan diatas, urutan elemennya dalam memori jika megikuti cara :

(16)

ROW MAJOR ORDER

(URUTAN YANG MENGUTAMAKAN/MENDAHULUKAN BARIS)

1 2 3 4 5 6 7 8 9….. 19 20 21 22 23 24

-1,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 (2)

@A[-1,3] = 1000 H

Setiap pindah Satu Baris pindah 6 Elemen

COLUMN MAJOR ORDER

( URUTAN YANG MENDAHULUKAN KOLOM)

-1,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 8

@A[-1,3] = 1000 H

Setiap pindah Satu Kolom pindah 4 Elemen

(17)

BILA DINYATAKAN DENGAN NOMOR URUT MAKA PENEMPATAN ELEMEN ARRAY :

CARA ROW MAJOR ORDER

3 4 5 6 7 8

-1 1 2 3 4 5 6

0 7 8 9 10 11 12

1 13 14 15 16 17 18

2 19 20 21 22 23 24

CARA COLUMN MAJOR ORDER

3 4 5 6 7 8

-1 1 5 9 13 17 21

0 2 6 10 14 18 22

1 3 7 11 15 19 23

2 4 8 12 16 20 24

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 , 3 .. 8 ] = 4 * 6

= 24

2 - (-1)+1 (8-3)+1 = 4 Baris = 6 Kolom

(18)

       3        4      5         6         7       8   -1 A B C D E F 0 G H I J K L 1 M N O P Q R       3         4      5         6         7       8   -1 1 2 3 4 5 6 0 7 8 9 10 11 12 1 13 14 15 16 17 18

C1. Menentukan Alamat @A[2,5]

menggunakan ROW MAJOR ORDER

@A[-1,3] = 1000 H

@A[2,5] =……?

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 = 18 + 2 = 20 Elemen

Satu Elemen 4 Byte  Pindah 20 * 4 = 80 Byte  80 Dec = 50 Hexa Dec.

Atau tanpa melihat Gambar : A [Baris, Kolom ]

Ditanya : @A[ 2 , 5 ]

Diketahui : @A[ -1 , 3 ] Dikurang 3 2

Pindah 3 Baris = 3 * Banyak Elemen Per baris = 3 * 6 = 18

Pindah 2 Kolom = 2 2

Total Perpindahan 18 + 2 = 20 Elemen

(19)

      3       4      5         6         7       8   -1 A B C D E F 0 G H I J K L 1 M N O P Q R        3         4      5         6         7       8   -1 1 5 9 13 17 21 0 2 6 10 14 18 22 1 3 7 11 15 19 23

Dimana 1 Elemen 4 Byte Jadi  20 * 4 = 80 Byte ( Decimal )

80 Decimal = 50 Hexa Decimal

Jadi Alamat @A[2,5] = 1000 H + 50 H = 1050 H

C2. Menentukan Alamat @A[2,5] menggunakan

COLUMN MAJOR ORDER

@A[-1,3] = 1000 H

@A[2,5] = ……?

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 = 8 + 3 = 11 Elemen

Satu Elemen 4 Byte  Pindah 11 * 4 = 44 Byte= 44 Dec 44 Dec = 2C Hexa,

(20)

3 4 5 6 7 8 -1 0 1 2 3 4 5 6 7 8 -1 0 1 2  

Atau tanpa melihat Gambar : A [Baris, Kolom ]

Ditanya : @A[ 2 , 5 ]

Diketahui : @A[ -1 , 3 ] Dikurang 3 2

Pindah 2 Kolom = 2 * Banyak Elemen Per Kolom = 2 * 4 = 8

Pindah 3 Baris = 3 3 Total Perpindahan 8 + 3 = 11 Elemen

Dimana 1 Elemen 4 Byte Jadi ---- 11 * 4 = 44 Byte ( Decimal ) 44 Dec. = 2C Hexa Dec.l

Jadi Alamat @A[2,5] = 1000 H + 2C H = 102C H

Array Tiga Dimensi

Suatu Array dideklarasikan A[ 2 ..4 , -1 .. 2 , 3 .. 8 ], setiap elemen terdiri 4 byte. Alamat elemen pertama @A[2,-1,3]= 1000 H ditanya :

A. Jumlah Elemen

B. Jumlah Byte Seluruhnya C. Alamat @A[4,2,5]

C1. Menggunakan Row Major Order C2. Menggunakan Column Major Order

JAWAB ilustrasi : @A[2,-1,3] = 1000 H 3 4 5 6 7 8 -1 0 1 2

Blok 2 Blok 3 Blok 4

@A[4,2,5] =….?

(21)

3 4 5 6 7 8 -1 1 2 3 4 5 6 0 7 8 9 10 11 12 1 13 14 15 16 17 18 2 19 20 21 22 23 24   3 4 5 6 7 8 -1 25 26 27 28 29 30 0 31 32 33 34 35 36 1 37 38 39 40 41 42 2 43 44 45 46 47 48 3 4 5 6 7 8 -1 49 50 51 52 53 54 0 55 56 57 58 59 60 1 61 62 63 64 65 66 2 67 68 69 70 71 72 Blok Baris Kolom

(4 – 2 )+1 (2-(-1))+1 (8-3) + 1

3 Blok 4 Baris 6 Kolom

A[ 2 .. 4 , -1 .. 2 , 3 . . 8 ]

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 ORDER @A[2,-1,3] = 1000 H

BLOK 2 BLOK 3 BLOK 4

@A[4,2,5] = ……?

Dari Gambar terlihat urutan perpindahan dari elemen no. 1 ke Elemen No. 69 perpindahan sebanyak 68 Elemen.

68 * 4 Byte =272 Byte --- 272 Dec. = 110 Hexa Dec.

Jika tidak melihat gambar dapat dihitung dengan melihat perpindahan Blok, Baris dan kolom.

Ditanya : @A[ 4 , 2 , 5 ]

(22)

3 4 5 6 7 8 -1 1 5 9 13 17 21 0 2 6 10 14 18 22 1 3 7 11 15 19 23 2 4 8 12 16 20 24 3 4 5 6 7 8 -1 25 29 33 37 41 45 0 26 30 34 38 42 46 1 27 31 35 39 43 47 2 28 32 36 40 44 48 3 4 5 6 7 8 -1 49 53 57 61 65 69 0 50 54 58 62 66 70 1 51 55 59 63 67 71 2 52 56 60 64 68 72 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 Alamat @A[4,2,5] = 1000 H + 110 H = 1110 H

C2. COLUMN MAJOR ORDER @A[2,-1,3] = 1000 H

BLOK 2 BLOK 3 BLOK 4

@A[4,2,5] = ……?

Dari Gambar terlihat urutan perpindahan dari elemen no. 1 ke Elemen No. 60 perpindahan sebanyak 59 Elemen.

(23)

Jika tidak melihat gambar dapat dihitung dengan melihat perpindahan Blok, Baris dan kolom.

Ditanya : @A[ 4 , 2 , 5 ]

Diketahui @A[ 2 , -1 , 3 ] Di kurang 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 ) 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 59 Elemen Pindah = 59 Elemen

= 59 * 4 Byte

= 236 Byte (Decimal) = EC Hexa Dec

(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 pertama @A[1,2,-1,3] = 1000 H

Ditanya : A . Jumlah Elemen

B. Jumlah Byte Seluruhnya C. Alamat @A[2,4,2,5] ?

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 , -1 . . 2 , 3 . . 8 ] ILUSTRASI GRUP 1 3 4 5 6 7 8 3 4 5 6 7 8 3 4 5 6 7 8 -1 0 1 2

Blok 2 Blok 3 Blok 4

GRUP 2 3 4 5 6 7 8 3 4 5 6 7 8 3 4 5 6 7 8 -1 0 1 2

Blok 2 Blok 3 Blok 4

A. Jumlah Elemen = 2 Grup * 3 Blok * 4 Baris * 6 Kolom = 144 Elemen

(25)

C1. ROW MAJOR ORDER GRUP 1 3 4 5 6 7 8 3 4 5 6 7 8 3 4 5 6 7 8 -1 0 1 2

Blok 2 Blok 3 Blok 4

GRUP 2 3 4 5 6 7 8 3 4 5 6 7 8 3 4 5 6 7 8 -1 0 1 2 1 4 1 Blok 2 Blok 3 Blok 4

C2. COLUMN MAJOR ORDER

GRUP 1 3 4 5 6 7 8 3 4 5 6 7 8 3 4 5 6 7 8 -1 0 1 2

Blok 2 Blok 3 Blok 4

GRUP 2 3 4 5 6 7 8 3 4 5 6 7 8 3 4 5 6 7 8 -1 0 1 2

(26)

Latihan Soal

Latihan Array satu dimensi :

1. Suatu array dideklarasikan dengan : A[-2 .. 5 ], 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 ditulis @A[4]

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 ditulis @A[5]

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 ditulis @A[6]

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] atau @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 pertama @A[0][0]=FBCA H Ditanya : A . Jumlah Elemen

(27)

B. Jumlah Byte Seluruhnya C. Alamat A[3,2] atau @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] atau @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] atau @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

(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 C. @A[2,4,4,5]

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 C. @A[1,2,1,2]

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 D. @A[3,0,3,6,2]

C1. Row Major Order C2. Column Major Order

(29)

Daftar Pustaka

1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, 2004

2. Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, 2004

3. Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, 2004

4. Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, 2002 5. Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4

(30)

     

MODUL PERKULIAHAN

   

Algoritma

Pemrograman &

Struktur Data

     

Pertemuan 3

LINKED LIST

           

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

  Ilmu Komputer  Teknik Informatika 

03

87031  Tim Dosen         

Abstract 

Kompetensi 

   

Membahas tentang konsep dari linked list dan penerapannya

 

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

25 12 17 10

( 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

(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 : INFO

Tipe : Integer

Isi : 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 .

(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();

}

 

(34)

Perhatikan kembali Linier Singly Lingked List

FIRST LAST

INFO LINK INFO LINK INFO LINK INFO LINK

25 12 17 10

( 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 )    

(35)

Akan diinsert disebelah kanan seperti berikut

FIRST LAST

INFO LINK INFO LINK

25 12

( 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

25 12 17 10

( 1 ) ( 2) ( 3 ) ( 4 )

(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 LAST

LEFT INFO RIGHT

25 12 17 10

(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>

(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; }

(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

25 12

(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 LAST

LEFT INFO RIGHT

25 12 17 10

1 2 3 4

Akan dihapus simpul yang paling kanan (4) menjadi sebagai berikut: FIRST LAST

LEFT INFO RIGHT

25 12 17

1 2 3 Pointer LAST akan menunjuk Ke Record Ke 3

(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);

(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; 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(); } while (PIL<9); } void AWAL(void) {

(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; } X=P->INFO;

cout<<"DATA YANG AKAN DIHAPUS : "<<X; free(P);

Q->LINK=NULL; LAST=Q;

} else

(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, 2004

2. Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, 2004

3. Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, 2004

4. Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, 2002 5. Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4

(45)

     

MODUL PERKULIAHAN

   

Algoritma

Pemrograman &

Struktur Data

     

Pertemuan 4

STACK (TUMPUKAN)

           

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

  Ilmu Komputer  Teknik Informatika 

04

87031  Tim Dosen         

Abstract 

Kompetensi 

   

Membahas tentang konsep dari queue (antrian) dan penerapannya

 

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 3 2 2 Buku 2 3 1 Meja 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

(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 = 10 0 1 2 3 4 5 6 7 8 9 10 n S[ ] 25 12 17 10 Dasar Top 0 4 10 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

(48)

b. Beberapa Kondisi Stack.

Ditentukan oleh posisi Pointer Top

1. Stack kosong tak ada Isinya (awal)

0 1 2 3 4 5 n

S[ ] …. ….

Dasar Top

STACK dalam kondisi : Kosong Top = 0 Bisa Diisi Top<n

2. Stack penuh tak bisa diisi

0 1 2 3 4 5 6 7 8

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

0 1 2 3 4 5 n

S[ ] X X X X …. …. …. ….

Dasar Top STACK dalam kondisi :

Bisa diisi Top < n Ada isinya Top > 0

(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”

(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 ……… }

(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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 S[ ] a a a a b B b b

Dasar1 Top1 Top2 Dasar 2

0 4 13 9

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 0 1 2 3 4 5 6 7 8 9 10 11

S[ ]

Dasar1 Top1 Dasar2 Top2

Kondisi Awal :

- Stack 1 Kosong dan bisa di isi - Stack 2 Kosong dan bisa di isi

(52)

Cirinya :

Dasar1 =0 , Top1=0

Dasar2 = n + 1 , Top2 = n + 1

2. Stack1 dan Stack2 ada Isinya

0 1 2 3 4 5 6 7 8 9 10 11 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

0 1 2 3 4 5 6 7 8 9 10 11 S[ ]

a a a a a a b b b b b

Dasar1 Top1 Top2 Dasar 2 Stack1 dan Stack2 Tak bisa di isi

Cirinya : Top2 – Top1 = 1 4 Stack Penuh n 0 1 2 3 4 5 6 7 8 9 10 11 S[ ] a a a a a a a a a a a

(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; }

(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

(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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 S[ ] a a a a B b b b

Top1 Dasar2 Dasar 1 Top2

7 3 6 10

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

(56)

a. Beberapa kondisi Stack 1. Kondisi Awal n = 13 0 1 2 3 4 5 6 7 8 9 10 11 12 13 S[ ] Top2 Dasar2 Dasar1 Top1 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

2. Stack ada isinya

n = 13 0 1 2 3 4 5 6 7 8 9 10 11 12 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

(57)

3. Stack penuh n = 13 0 1 2 3 4 5 6 7 8 9 10 11 12 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 CIRI

1 STACK1 KOSONG STACK2 KOSNG Top1= div(n,2) +1 Top2= div(n,2) 2 STACK1 PENUH STACK 2 PENUH Top1 = 1 Top2 = n 3 STACK1 BISA DIISI

STACK2 BISA DIISI

Top1 > 1 Top2 < n

4 STACK1 ADA ISINYA

STACK2 ADA ISINYA

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

(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

(59)

Daftar Pustaka

1. Pengantar Struktur Data dan Algoritma, Bambang Wahyudi, Penerbit Andi Yogyakarta, Edisi 1, 2004

2. Struktur Data dengan C, Paulus Bambangwirawan Dipl.Inf, Penerbit Andi Yogyakarta, Edisi 1, 2004

3. Pengantar Algoritma dengan Bahasa C, Thompson Susabda Ngoen, Penerbit Salemba Teknika, Edisi 1, 2004

4. Pemrograman C++, Abdul Kadir, Penerbit Andi Yogyakarta, Edisi 1, 2002 5. Struktur Data dengan C, C++, Moh. Sjukani, Mitra Wacana Media, Edisi 4

(60)

     

MODUL PERKULIAHAN

   

Algoritma

Pemrograman &

Struktur Data

     

Pertemuan 5

QUEUE (ANTRIAN)

           

  Fakultas  Program Studi  Tatap Muka  Kode MK  Disusun Oleh   

  Ilmu Komputer  Teknik Informatika 

05

87031  Tim Dosen         

Abstract 

Kompetensi 

   

Membahas tentang konsep dari queue (antrian) dan penerapannya

 

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 0 1 2 3 4 5 6 7 8 9 10 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

(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 = 10 0 1 2 3 4 5 6 7 8 9 10 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 = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ] X X X X

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 = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ] X F = 3 Sudak keluar 3 F < R antrian ada isinya

(63)

4. Misal masuk lagi 2 Pengantri misal n = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ] X X X F R

F<R antrian ada isinya R< n antrian bisa di isi 5. Misal sesudah itu keluar 3 (semua) pengantri

misal n = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ] F = R antrian KOSONG F R

R < n antrian bisa di isi

6. Misal masuk lagi 4 Pengantri

misal n = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ]

X X X X

F < R antrian ADA ISINYA

R = n antrian Penuh F R

7. Misal Keluar/dilayani 4 (Semua ) Pengantri

misal n = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ] F = R antrian Kosong R = n antrian Penuh F R

(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 = 10 0 1 2 3 4 5 6 7 8 9 10 n Q[ ] X X X X X X X X X X 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 )

(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

(66)

CIRCULAR QUEUE ( Antrian Melingkar ) ILUSTRASI n 1 2 3 4 5 6 7 8 9 10 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 n 1 2 3 4 5 6 7 8 9 10 Q[ ] Flag = 0 F R

(67)

KONDISI ARTINYA

1 F = R dan Flag = 0 Kosong, Bisa di isi

2 Atau cukup Flag = 0 Kosong Bisa di isi

Flag 0 ---- artinya tidak ada data Flag 1 ---- artinya ada datanya

2. Masuk 1 Pengantri n 1 2 3 4 5 6 7 8 9 10 Q[ ] X 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

n 1 2 3 4 5 6 7 8 9 10 Q[ ] X X X X Flag = 1 R F KONDISI ARTINYA 1 F != R Ada isinya

2 Flag = 1 Ada isinya

(68)

4. Keluar 1 Pengantri n 1 2 3 4 5 6 7 8 9 10 Q[ ] 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

n 1 2 3 4 5 6 7 8 9 10 Q[ ] 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

n 1 2 3 4 5 6 7 8 9 10 Q[ ] X X X X X X X X Flag = 1 R F

(69)

KONDISI ARTINYA

1 F != R Ada isinya

2 Flag = 1 Ada isinya

3 F != R Bisa di isi

7. Masuk Lagi 2 Pengantri

n 1 2 3 4 5 6 7 8 9 10 Q[ ] 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 )

(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; } }

(71)

DOUBLE ENDED QUEUE ( DEQUE ) Antrian dengan ujung ganda

ILUSTRASI

n

Insert Kiri 1 2 3 4 5 6 7 8 9 10 insert Kanan

D[ ]

10 15 23

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.

(72)

a. Beberapa Kondisi Antrian

1. Keadaan AWAL (Inisial)

0 1 2 3 4 5 6 7 n D[ ]

1 2 3 ………..

L R Insert Kanan

L=R=0 Pada Kondisi ini hanya bisa insert kanan

2. Insert Kanan Sebanyak 3 elemen

0 1 2 3 4 5 6 7 n D[ ] X X X

L R

Insert Kanan

Delete kiri 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

0 1 2 3 4 5 6 7 n

D[ ]  X

L R

(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

0 1 2 3 4 5 6 7 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

0 1 2 3 4 5 6 7 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 = 4

0 1 2 3 4 5 6 7 n D[ ] X X X X

L R Pada Kondisi ini :

(74)

L = 0 (Penuh kiri)

R = 4 (Penuh Kanan) - tak bisa insert kiri

7. Delete kiri 4 Elemen

0 1 2 3 4 5 6 7 n D[ ]

L R Pada Kondisi ini :

L = 4, R = 4

Pada posisi mana saja jika L = R maka antrian Kosong

KONDISI ANTRIAN CIRI

1 AWAL L = R = 0

2 KOSONG L = R dimana saja

3 PENUH KIRI PENUH KANAN PENUH SEBENARNYA L = 0 R = n 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

(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

(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

Gambar

ILUSTRASI SEBUAH SIMPUL (RECORD)
ILUSTRASI SEBUAH SIMPUL  Simpul dengan 3 Elemen
Ilustrasi simpul yang dihasilkan oleh program misal X=25             LAST   FIRST  P
Ilustrasi  misal n = 10                                    0          1         2         3       4       5      6      7      8      9     10      n                      S[  ]  25  12  17 10                                            Dasar
+4

Referensi

Dokumen terkait

Secara terinci, matriks aktualisasi telah mencoba menjabarkan masing-masing sila dari Pancasila mulai dari perwujudan dan aktualisasinya, hingga implikasinya dalam penanganan

Mengenai hal ini, apa yang telah dilaku- kan oleh pemerintah Iran bisa dijadikan bahan kajian yang tepat, yaitu karena konsekuensi atas pelarangan perkawinan sesama

 Secara Nasional produksi padi Provinsi Sulawesi Tengah tahun 2015 mempunyai kontribusi sebesar 1,35 persen dari total produksi padi nasional sebesar 75,36 juta ton

Penelitian menggunakan 60 ekor ayam pedaging, dua puluh ekor ayam di awal penelitian diambil darahnya untuk pengamatan titer antibodi asal induk terhadap infeksi virus

Sehingga dapat disimpulkan bahwa H 0 ditolak, yang artinya secara simultan perubahan laba bersih, perubahan arus kas operasi, perubahan arus kas investasi, perubahan

Indonesia merupakan Negara kepulauan dengan kebudayaan yang beragam. Struktur masyarakat Indonesia ditandai dengan keragaman suku bangsa, ras, agama dan budaya.

DATA UJI STATISTIK RANCANGAN ACAK LENGKAP TERHADAP PARAMETER PERTUMBUHAN TANAMAN KEDELAI ( Glyzine max L.).

pembudidaya di kelurahan Meruya Selatan atau tepatnya di kawasan Kayon, dengan bapak H.Gupron,…..saya mulai usaha penjualan dan budidaya sejak tahun 1980 sebelum dibangunnya