• Tidak ada hasil yang ditemukan

Konsep Struktur Data & Array

N/A
N/A
Warni

Academic year: 2024

Membagikan "Konsep Struktur Data & Array"

Copied!
153
0
0

Teks penuh

(1)

Pertemuan 1

Konsep Struktur Data &

Array

(2)

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

Pemakaian Struktur Data yang tepat didalam proses

pemrograman, akan menghasilkan Algoritma yang lebih jelas dan tepat sehingga menjadikan program secara keseluruhan lebih sederhana.

STRUKTUR DATA

(3)

Pada garis besarnya, Data dapat dikategorikan menjadi : A. Type Data Sederhana / Data Sederhana

Terdiri dari :

1. Data Sederhana Tunggal

Misalnya : Integer, Real/Float, Boolean dan Character

2. Data Sederhana Majemuk Misalnya : String

B. Struktur Data Terdiri dari :

1. Struktur Data Sederhana Misalnya Array dan Record

(4)

2. Struktur Data Majemuk Terdiri dari :

a. Linier

Misalnya : Stack, Queue dan Linear Linked List.

b. Non Linier

Misalnya : Pohon (Tree), Pohon Biner (Binary Tree), Pohon Cari Biner (Binary Search Tree), General Tree serta Graph.

(5)

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 yang terurut dan homogen.

Terurut : Dapat diartikan bahwa elemen tersebut dapat diidentifikasi sebagai elemen pertama, elemen kedua dan seterusnya sampai elemen ke-n.

Homogen : Adalah bahwa setiap elemen dari sebuah

Array tertentu haruslah mempunyai type data yang sama.

(6)

Definisi Array

❖ Sebuah Array dapat mempunyai elemen yang seluruhnya berupa integer atau character atau String bahkan dapat pula terjadi suatu Array mempunyai elemen berupa Array.

Karakteristik Array :

1. Mempunyai batasan dari pemesanan alokasi memory (Bersifat Statis)

2. Mempunyai Type Data Sama (Bersifat Homogen) 3. Dapat Diakses Secara Acak

(7)

Definisi Array

3 Hal yang harus diketahui dalam mendeklarasikan array :

a. Type data array

b. Nama variabel array c. Subskrip / index array

Jenis Array (yang akan dipelajari) adalah :

a. Array Dimensi Satu (One Dimensional Array) b. Array Dimensi Dua (Two Dimensional Array) c. Array Dimensi Tiga (Thee Dimensional Array)

(8)

Array Dimensi Satu

1.ARRAY DIMENSI SATU (One Dimensional Array) Dapat disebut juga dengan istilah vektor yang menggambarkan data dalam suatu urutan

Deklarasi : Type_Data Nama_Variabel [index]

Misalnya : int A[5];

Penggambaran secara Logika :

A[1] A[2] A[3] A[4] A[5]

Elemen Array

0 1 2 3 4 Subscript / Index

(9)

Array Dimensi Satu

void main() { int bil [5];

clrscr;

cout<<"Masukkan 5 bilangan genap : "<<endl;

for (int i = 0; i < 5; i++) { cout<<"Bilangan ";

cout<< i + 1 <<" : ";

cin>> bil[i];

cout<<endl;

}

cout<<endl;

cout<<"5 bilangan genap yang dimasukkan “ <<endl;

for (int i = 0; i < 5; i++) cout<<" "<<bil[i];

getch();

}

(10)

Rumus untuk menentukan jumlah elemen dalam Array : n (Elemen Array)

i=1

 = Perkalian dari elemen sebelumnya (untuk array dimensi dua & tiga)

Contoh :

Suatu Array A dideklarasikan sbb :

int A[10]; maka jumlah elemen Array dimensi satu tersebut adalah = 10

Array Dimensi Satu

(11)

Rumus : @A[i] = B + (i – 1) * L

Dimana : @A[i] : Posisi Array yg dicari

B : Posisi awal index di memory komputer i : Subkrip atau indeks array yg dicari

L : Ukuran / Besar memory suatu type data PEMETAAN (MAPPING)

ARRAY DIMENSI SATU KE STORAGE

Contoh :

Suatu Array A dideklarasikan sebagai berikut :

int A[5]; dengan alamat awal index berada di 0011 (H) dan ukuran memory type data integer = 2

Tentukan berapa alamat array A[3] ?

(12)

Rumus : @A[i] = B + (i – 1) * L Diketahui :

@A[i] = A[3]

B = 0011 (H)

i = 3 L = 2

Penyelesaian :

A[3] = 0011(H) + (3 – 1) * 2

= 0011(H) + 4 (D)

= 0011(H) + 4 (H)

= 0015(H) 4 Desimal = 4 Hexa

0011

A[1] A[2] A[3] A[4] A[5]

0013 0015 0017 0019

0 1 2 3 4

PEMETAAN (MAPPING)

ARRAY DIMENSI SATU KE STORAGE

(13)

KONVERSI BILANGAN

1. Decimal adalah bilangan berbasis sepuluh yang terdiridari 0, 1, 2, 3, 4, 5, 6, 7, 8, dan 9

2. Hexadecimal adalah bilangan berbasis enam belas yang terdiri dari 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, dan F Tabel di bawah adalah contoh konversi bilangan Decimal, dan Hexadecimal

(14)

Contoh KONVERSI ANTAR BILANGAN

Konversi Bilangan Decimal ke Hexadecimal Contoh 254 (10) = ...(16)

Caranya dengan membagi bilangan tersebut dengan enam belas sampai bilangan tersebut tidak bisa lagi dibagi enam belas (kurang dari enam belas) dengan mencatat setiap sisa pembagian.

254 : 16 = 15 sisa 14 atau E (lihat tabel di atas) 15 : 16 = sisa 15 atau F (lihat tabel di atas)

Jadi 254 (10) = FE (16) diurutkan dari sisa pembagian terakhir.

(15)

0 1 2 3 4 5 6 7

21d2 21d4 21d6 21d8 21da 21dc 21de 21e0

indeks

value

alamat

%x adalah hexadesimal

Contoh Penerapan

Array Dimensi 1 Pada Program C++

(16)

2. ARRAY DIMENSI DUA (Two Dimensional Array)

Deklarasi : Type_Data Nama_Variabel [Index1] [index2];

Misal : int A[3][2];

Penggambaran secara Logika

:

Array Dimensi Dua

0 1 0

1 2

Sering digunakan dalam menterjemahkan matriks pada pemrograman.

(17)

Menentukan jumlah elemen dalam Array dimensi dua:

n (Elemen array) i=1

Contoh :

Suatu Array X dideklarasikan sbb : int X[4][3];

maka jumlah elemen Array dimensi dua tersebut adalah : (4) * (3) = 12

 = Perkalian dari elemen sebelumnya (untuk array dimensi dua & tiga)

Array Dimensi Dua

(18)

PEMETAAN (MAPPING)

ARRAY DIMENSI DUA KE STORAGE

Keterangan :

@M[i][j] = Posisi Array yg dicari, M[0][0] = Posisi alamat awal index array,i = Baris, j = kolom, L = Ukuran memory type data

K = Banyaknya elemen per kolom, N = Banyaknya elemen per baris

Terbagi Dua cara pandang (representasi) yang berbeda : 1. Secara Kolom Per Kolom (Coloumn Major Order/CMO)

@M[i][j] = M[0][0] + {(j - 1) * K + (i - 1)} * L

2. Secara Baris Per Baris (Row Major Order / RMO)

@M[i][j] = M[0][0] + {(i - 1) * N + (j - 1)} * L

(19)

Penggambaran secara logika

Misal : int M[3][2];

(Array dengan 3 Baris & 2 Kolom)

Berdasarkan Cara pandang :

1. Kolom Per Baris (Row Major Order / RMO)

M[0,0] M[0,1] M[1,0] M[1,1] M[2,0] M[2,1]

M[0,0] M[1,0] M[2,0] M[0,1] M[1,1] M[2,1]

2. Baris Per Kolom (Coloumn Major Order / CMO) Jumlah elemen per baris = 2

Jumlah elemen per kolom = 3

0 1 0

1 2

(20)

Contoh Pemetaan :

Suatu Array X dideklarasikan sebagai berikut : Float X[4][3], dengan alamat index X[0][0] berada di 0011(H) dan ukuran type data float = 4

Tentukan berapa alamat array X[3][2]

berdasarkan cara pandang baris dan kolom ?

0011(H)

?

0 1 2

0 1 2 3

index

index

(21)

Lanjutan Contoh Pemetaan :

Penyelesaian :

Secara Baris Per Baris (Row Major Oder / RMO)

@M[i][j] = @M[0][0] + {(i - 1) * N + (j - 1)} * L X[3][2] = 0011(H) + {(3 – 1) * 3 + (2 – 1)} * 4

= 0011(H) + 28 (D) 1C (H)

= 0011(H) + 1C (H)

= 002D(H)

(22)

Lanjutan Contoh Pemetaan :

Penyelesaian :

Secara Kolom Per Kolom (Coloumn Major Oder / CMO)

@M[i][j] = @M[0][0] + {(j - 1) * K + (i - 1)} * L X[3][2] = 0011(H) + {(2 – 1) * 4 + (3 – 1)} * 4

= 0011(H) + 24 (D) 18 (H)

= 0011(H) + 18 (H)

= 0029(H)

(23)

Contoh program array dua dimensi

#include<stdio.h>

#include<conio.h>

main() {

int a[3][5];

for (int i=0;i<3;i++) {

for (int j=0;j<5;j++) {

printf("%x ",&a[j][i]);

}

printf("\n");

}

getch();

}

(24)

Contoh program array dua dimensi

#include<stdio.h>

#include<conio.h>

main() {

int a[3][5];

for (int i=0;i<3;i++) {

for (int j=0;j<5;j++) {

printf("%x ",&a[i][j]);

}

printf("\n");

}

getch();

}

(25)

Latihan :

1. Suatu array A dideklarasikan sbb :

int A[50] dengan alamat awal berada di 0011(H). Tentukan berapa alamat array A[20]

dan A[40]?

2. Suatu array X dideklarasikan sbb :

Float X[4][5] dengan alamat awal berada pada

0011(H). Tentukan berapa alamat array X[4][3],

berdasarkan cara pandang baris dan kolom?

(26)

SISTEM BILANGAN

Pertemuan 2

(27)

I. Konsep Dasar Sistem Bilangan

• Sistem bilangan adalah suatu cara untuk mewakili besaran dari suatu item fisik.

• Konsep dasar sistem bilangan dikarakteristikkan oleh basis (radix), absolute digit dan posisi (place) value, yang dituliskan:

• Basis yang digunakan sistem bilangan tergantung dari jumlah nilai bilangan yang dipergunakan.

(28)

Konsep Dasar Sistem Bilangan lanjutan

Sistem bilangan yang sering digunakan adalah:

Sistem bilangan desimal Sistem bilangan biner Sistem bilangan oktal

Sistem bilangan hexadesimal

(29)

1. Sistem Bilangan Desimal

Sistem bilangan desimal menggunakan basis 10 (deca)

Menggunakan 10 macam simbol bilangan berbentuk digit angka: 0,1,2,3,4,5,6,7,8,9

Dasar penulisan:

Bentuk nilai desimal dapat berupa integer (bilangan bulat) dan pecahan

Dapat ditulis dalam bentuk eksponensial yaitu ditulis dengan mantissa dan exponent.

Contoh: 1234 = 0,1234 x 104

mantissa exponent

A x 10

n
(30)

Sistem Bilangan Desimal lanjutan Penulisan base/radix dituliskan setelah absolut digit,

yaitu A10, atau A(D).

Dalam hal ini yang dituliskan adalah A10

Contoh nilai 435210 dan 762,1510 dapat diartikan:

4 x 103 = 4000 3 x 102 = 300 5 x 101 = 50 2 x 100 = 2 +

4352

7 x 102 = 700 6 x 101 = 60 2 x 100 = 2 1 x 10-1 = 0,1 5 x 10-2 = 0,05 +

762,15

(31)

2. Sistem Bilangan Biner

Sistem bilangan biner menggunakan basis 2 (binary)

Menggunakan 2 macam simbol bilangan berbentuk digit angka: 0 dan 1

Penulisan base/radix dituliskan setelah absolut digit, yaitu A2 atau A(B). Dalam hal ini yang dituliskan adalah A2

Dasar penulisan:

Contoh penulisan: 1001 00112

A x 2

n
(32)

3. Sistem Bilangan Oktal

Sistem bilangan oktal menggunakan basis 8 (octal)

Menggunakan 8 macam simbol bilangan berbentuk digit angka: 0,1,2,3,4,5,6,7

Penulisan base/radix dituliskan setelah absolut digit, yaitu A8 atau A(O). Dalam hal ini yang dituliskan adalah A8

Dituliskan:

Contoh penulisan: 3478

A x 8

n
(33)

4. Sistem Bilangan Hexadesimal

Sistem bilangan hexadesimal menggunakan basis 16 (hexa)

Menggunakan 16 macam simbol bilangan berbentuk digit angka: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

Penulisan base/radix dituliskan setelah absolut digit, yaitu A16 atau A(H). Dalam hal ini yang dituliskan adalah A16 Dituliskan:

Contoh penulisan: A7816

A x 16

n
(34)

II. Satuan Data

Komputer bekerja atas dasar sistem biner berupa 0 dan 1 yang disebut bit.

Bit merupakan satuan data terkecil dalam sistem komputer.

Bit-bit dapat digunakan untuk menyusun karakter apa saja.

Sebuah karakter dinyatakan dengan 8 bit atau 16 bit.

1. Byte

Byte merupakan satuan yang digunakan untuk

menyatakan sebuah karakter pada sistem ASCII atau EBCDIC

1 byte = 8 bit

(35)

Satuan Data lanjutan

2. Kilobyte (KB)

Biasa digunakan untuk berkas gambar berukuran kecil 1 kilobyte = 1024 byte

3. Megabyte (MB)

Biasa digunakan untuk menyatakan kapasitas RAM dalam PC

1 MB = 1024 KB = 1.048.576 byte 4. Gigabyte (GB)

Biasa digunakan untuk menyatakan kapasitas harddisk dalam PC

1 GB = 1024 MB = 1.073.741.824 byte

(36)

Satuan Data lanjutan

5. Terabyte (TB)

Biasa digunakan untuk menyatakan kapasitas harddisk dalam mainframe

1 TB = 1024 GB = 1.009.511.627.776 byte

6. Petabyte (PB)

1 PB = 1024 TB

(37)

III. Sistem Pengkodean

Sistem yang digunakan untuk mengkodekan karakter bermacam-macam.

Data disimpan dalam memori komputer menempati posisi 1 byte, yang menggunakan kombinasi dari digit Biner.

Komputer berbeda dalam menggunakan kode biner untuk mewakili sebuah karakter.

Ada beberapa kode yang akan dibahas, yaitu BCD, EBCDIC, ASCII dan Unicode

(38)

Sistem Pengkodean lanjutan

1. BCD (Binary Coded Decimal)

Merupakan kode biner yang digunakan hanya untuk mewakili nilai digit desimal saja.

Sebuah karakter BCD dinyatakan dengan 4 bit Karakter yang tersedia sebanyak 10 angka, yaitu angka 0,1,2,3,4,5,6,7,8,9

Digunakan pada komputer generasi pertama.

BCD 4 Bit Digit Desimal BCD 4 Bit Digit Desimal

0000 0 0101 5

0001 1 0110 6

0010 2 0111 7

0011 3 1000 8

0100 4 1001 9

(39)

Sistem Pengkodean lanjutan

2. EBCDIC (Extended Binary Coded Decimal Interchange Code)

EBCDIC dikembangkan oleh IBM, yang diterapkan pada berbagai komputer mainframe

Sebuah karakter dinyatakan dengan 8 bit

Karakter yang tersedia sebanyak 28 = 226 karakter Digunakan pada komputer generasi ketiga

(40)

Sistem Pengkodean lanjutan

3. ASCII (American Standard Code for Information Interchange)

ASCII dikembangkan oleh ANSI (American National Standard Institute)

Sebuah karakter ASCII dinyatakan dengan 8 bit Karakter yang tersedia sebanyak 226 karakter,

meliputi huruf, angka, dan spesial karakter, termasuk simbol Yunani dan karakter grafis

(41)

Tabel EBCDIC 8 bit

(42)

Tabel ASCII 8 bit

(43)

Sistem Pengkodean lanjutan

4. Unicode

Sebuah karakter Unicode dinyatakan dengan 16 bit Karakter yang tersedia sebanyak 65.536 karakter, meliputi huruf, angka, dan spesial karakter, termasuk simbol Yunani, karakter grafis, simbol Arab dan Cina

(44)

1. Konversi dari Bilangan Desimal ke Biner

Dengan cara membagi bilangan desimal dengan 2 (basis biner) sampai tidak bisa dibagi lagi

Kemudian sisa pembagian diurutkan dari bawah ke atas dalam format 8 bit

Contoh nilai 8910 akan dikonversikan menjadi Biner

(45)

Konversi dari Bilangan Desimal ke Biner lanjutan 89

2 :

44 sisa 1 2 :

22 sisa 0 2 :

11 sisa 0

2 :

5 sisa 1

2 :

2 sisa 1

2 :

1 sisa 0

Dituliskan dari bawah ke atas: 1011001

Karena penulisan dengan 8 bit, maka 8910 = 0101 10012

(46)

2. Konversi dari Bilangan Desimal ke Oktal

Dengan cara membagi bilangan desimal dengan 8 (basis oktal) sampai tidak bisa dibagi lagi

Cara yang digunakan sama dengan bilangan biner Contoh nilai 14710 akan dikonversikan menjadi Oktal

(47)

Konversi dari Bilangan Desimal ke Oktal lanjutan 147

8 :

18 sisa 3

8 :

2 sisa 2

• Dituliskan dari bawah ke atas: 223

• Maka hasilnya menjadi 14710 = 2238

(48)

3. Konversi dari Bilangan Desimal ke Hexadesimal

Dengan cara membagi bilangan desimal dengan 16 (basis hexa) sampai tidak bisa dibagi lagi

Cara yang digunakan sama dengan bilangan biner Contoh nilai 12310 akan dikonversikan menjadi Hexa

(49)

Konversi dari Bilangan Desimal ke Hexadesimal lanjutan 123

16 :

7 sisa 11

• Sisa 11 dikodekan menjadi B

• Maka hasilnya menjadi 12310 = 7B16

(50)

4. Konversi dari Bilangan Biner ke Desimal

Dengan cara mengalikan masing-masing bit biner dalam bilangan sesuai dengan radix dan position value-nya

Contoh bit 11 01012 akan dikonversikan menjadi Desimal 1101012

1 x 20 = 1 0 x 21 = 0 1 x 22 = 4 0 x 23 = 0 1 x 24 = 16 1 x 25 = 32 +

53

Maka hasil di samping dituliskan:

11 01012

= 53

10
(51)

5. Konversi dari Bilangan Biner ke Oktal

Dengan cara membagi digit biner tersebut ke dalam tiga digit dari kanan

Ketiga digit tersebut kemudian dikonversikan menjadi desimal

Contoh bit 1010 10112 akan dikonversikan menjadi Oktal

Maka dituliskan menjadi 1010 10112 = 2538

(52)

6. Konversi dari Bilangan Biner ke Hexadesimal

Dengan cara membagi digit biner tersebut ke dalam empat digit dari kanan

Keempat digit tersebut kemudian dikonversikan menjadi desimal

Contoh bit 101010112 akan dikonversikan menjadi Hexa

Maka dituliskan menjadi

1010 1011

2 =

AB

16
(53)

7. Konversi dari Bilangan Oktal ke Desimal

Dengan cara mengalikan masing-masing bit oktal

dalam bilangan sesuai dengan radix dan position value- nya

Contoh bit 3718 akan dikonversikan menjadi Desimal 3718

1 x 80 = 1 7 x 81 = 56 3 x 82 = 192 +

249

Maka hasil disamping dituliskan:

3718 = 24910

(54)

8. Konversi dari Bilangan Oktal ke Biner

Dengan cara mengkonversikan setiap satu digit oktal menjadi tiga digit biner

Contoh bit 718 akan dikonversikan menjadi Biner

Maka dituliskan menjadi 718 = 0011 10012

(55)

Konversi ini tidak dapat dilakukan secara langsung, tetapi harus dikonversikan terlebih dahulu ke Desimal atau Biner

Contoh bit 2438 akan dikonversikan menjadi Hexa

Maka dituliskan menjadi 2438 = A316

9. Konversi dari Bilangan Oktal ke

Hexadesimal

(56)

10. Konversi dari Bilangan Hexadesimal ke Desimal

Dengan cara mengalikan masing-masing bit hexa

dalam bilangan sesuai dengan radix dan position value- nya

Contoh bit 8F16 akan dikonversikan menjadi Desimal

8F16

F x 160 = 15 8 x 161 = 128 +

143

Maka hasil disamping dituliskan:

8F16 = 14310

(57)

11. Konversi dari Bilangan Hexadesimal ke Biner

Dengan cara mengkonversikan setiap satu digit hexa menjadi empat digit biner

Contoh bit 8F16 akan dikonversikan menjadi Biner

Maka dituliskan menjadi 8F16 = 1000 11112

(58)

12. Konversi dari Bilangan Hexadesimal ke Oktal

Konversi ini tidak dapat dilakukan secara langsung, tetapi harus dikonversikan terlebih dahulu ke Desimal atau Biner sama dengan konversi dari oktal ke hexa Contoh bit 8F16 akan dikonversikan menjadi Oktal

Maka dituliskan menjadi 8F16 = 2178

Hexa 8 F

Biner

1000 1 111

10 001 111

Oktal

2 1 7

(59)

LATIHAN

Dosen diharapkan memberikan contoh dan

latihan konversi bilangan

(60)

REPRESENTASI DATA

Pertemuan 3

(61)

Komputer menggunakan dan memanipulasi data untuk

perhitungan aritmatik, pemrosesan data, dan operasi logik.

Type data yang digunakan dalam komputer digital diklasifikasikan:

• Data Numerik: merepresentasikan integer, pecahan, real, dan desimal berkode biner.

• Data Logikal: digunakan oleh operasi seperti OR, AND, COMPLEMENT, COMPARE dan SHIFT.

• Data Bit Tunggal: digunakan oleh operasi seperti SET, CLEAR, dan TEST.

• Data Alfanumerik: digunakan untuk manipulasi string oleh instruksi seperti MOVE dan SEARCH

I. Pengertian

(62)

Ilustrasi Representasi Data

(63)

II. Representasi Integer

Untuk keperluan pengolahan dan penyimpanan data komputer, hanya bilangan biner yang dapat

merepresentasikan bilangan

Integer direpresentasikan selain oleh nilai bilangannya juga dengan adanya tambahan tanda (Signed Integer) Tipe:

Sign and Magnitude One’s Complement Two’s Complement

(64)

1. Representasi Sign-Magnitude

Merepresentasikan bilangan integer negatif

Bit yang paling kiri diidentifikasikan sebagai tanda (sign) Jika bit paling kiri adalah nol maka bilangan tersebut positif

Jika bit paling kiri adalah satu maka bilangan tersebut negatif

Contoh:

+1810 = 000100102

−1810 = 100100102

(65)

Representasi Sign-Magnitude lanjutan

1. Penjumlahan pada Sign-Magnitude mempunyai aturan:

Sign tidak dijumlahkan, hanya magnitude Buang carry out dari bit yang paling kiri Jumlahkan yang sign-nya sama

Sign hasil = sign penambah Contoh penjumlahan 4 bit:

0 0010 (2) 1 1011 (-11) 0 0101 (5) 1 0100 (-4)

+————— +——————

0 0111 (7) 1 1111 (-15)

(66)

Representasi Sign-Magnitude lanjutan

2. Pengurangan pada Sign-Magnitude mempunyai aturan:

Lakukan pengurangan jika sign sama

Jika sign tidak sama, ubah soal ke penjumlahan Contoh pengurangan:

0 10100 (20) 1 1011 (-11) 0 00101 (5) 1 0100 (-4)

————— ——————

0 1111 (15) 1 0111 (-7)

(67)

Representasi Sign-Magnitude lanjutan

Kelemahan Sign-Magnitude:

Penambahan dan pengurangan memerlukan pertimbangan baik tanda bilangan maupun nilai relatifnya

Ada dua representasi bilangan nol, yaitu +010 = 000000002

−010 = 100000002

(68)

2. Representasi Komplemen Satu

Komplemen pada dasarnya merubah bentuk pengurangan menjadi pertambahan

Komplementasi bilangan biner dengan cara mengubah 1 menjadi 0 dan 0 menjadi 1

Contoh:

00110110 = 11001001

(69)

dibentuk dengan mengambil komplemen satu dari

bilangannya dan dengan menambahkan 1 pada posisi paling kanan

Contoh desimal 49 (dalam biner) menjadi bentuk komplemen dua:

110001

001110 → bentuk komplemen ke-1 1+

001111 → bentuk komplemen ke-2

3. Representasi Komplemen Dua

(70)

III. Penjumlahan Biner

• Penjumlahan bilangan biner dilakukan sama seperti penjumlahan bilangan-bilangan desimal.

• Operasi pengurangan, perkalian dan pembagian seperti yang dilakukan pada komputer dan kalkulator digital sesungguhnya menggunakan penjumlahan sebagai operasi dasarnya.

• Ada 4 kondisi dalam penjumlahan bilangan biner:

0 + 0 = 0 1 + 0 = 1 0 + 1 = 1

1 + 1 = 0 (carry out 1)

Maksud dari carry out, hasilnya tidak bisa memuat lebih dari 1 digit, tetapi disimpan ke dalam kolom sebelah yang lebih tinggi nilainya (digit paling kiri yang diabaikan).

(71)

1. Penjumlahan Biner dengan Komplemen Dua

Ada beberapa kasus yang dapat dilakukan dengan komplemen dua:

a. Kasus 1: Dua Blangan Positip

Penjumlahan dari dua bilangan positip dilakukan secara langsung.

Contoh:

8 → 1000

4 → 0100

—+ ———+

12 → 1100

(72)

Penjumlahan Biner dengan Komplemen Dua lanjutan

b. Kasus 2: Blangan Positip dan Negatip yang lebih kecil Contoh: 8 + (-4)

Caranya bilangan -4 akan diubah ke dalam bentuk komplemen dua, sehingga biner 4 (0100) menjadi:

Komplemen satu : 1011 Komplemen dua : 1011

——+1 1100 jadi penjumlahannya adalah:

8 1000

-4 1100

——+ ———+

4 1 0100 (digit paling kiri diabaikan)

(73)

Penjumlahan Biner dengan Komplemen Dua lanjutan

c. Kasus 3: Blangan Positip dan Negatip yang lebih besar Contoh: 8 + (-11)

Caranya bilangan -11 akan diubah ke dalam bentuk komplemen dua, sehingga biner 11 (1101) menjadi:

Komplemen satu : 0010 Komplemen dua : 0010

——+1 0011 jadi penjumlahannya adalah:

8 1000

-11 0011

——+ ———+

-3 1011 (bentuk biner dari -3)

(74)

Penjumlahan Biner dengan Komplemen Dua lanjutan

d. Kasus 4: Dua Blangan Negatip Contoh: -8 + (-7)

Caranya bilangan -8 dan -7 akan diubah ke dalam bentuk komplemen dua, jadi biner 8 (1000) dan 7 (0111) menjadi:

Komplemen satu : 0111 dan 1000

Komplemen dua : 0111 1000

1 1

——+ ——+

1000 1001

jadi penjumlahannya adalah:

-8 1000

-7 1001

—+ ———+

-15 1 0001 (digit paling kiri diabaikan)

(75)

Pertemuan 4 ARRAY

DIMENSI BANYAK

(76)

0 1 2

0 1 2 3 0

1

ARRAY DIMENSI TIGA (Three Dimensional Array)

Digunakan untuk mengelola data dalam bentuk 3 dimensi atau tiga sisi.

Deklarasi :

Type_Data Nama_Variabel [index1] [ndex2] [index3];

Misal : int A [3][4][2];

Penggambaran secara Logika :

(77)

Menentukan jumlah elemen dalam Array dimensi 3 : n (index array)

i=1

 = Perkalian dari statemen sebelumnya

Contoh :

Suatu Array X dideklarasikan sbb :

int A [3][4][2]; maka jumlah elemen Array dimensi tiga tersebut adalah :

(3) * (4) * (2) = 24

(78)

Rumus :

@M[m][n][p] = M[0][0][0] + {((m-1) *(jum.elemen2 *

jum.elemen3)) + ((n-1)*(jum.elemen 3)) + ((p-1)}* L

Contoh :

Suatu Array A dideklarasikan sebagai berikut :

int A [2][4][3], dengan alamat awal index A[0][0][0] berada di 0011(H) dan ukuran type data int = 2 Tentukan berapa alamat array di A[2][3][2] ?

PEMETAAN (MAPPING)

ARRAY DIMENSI TIGA KE STORAGE

(79)

Contoh Pemetaan :

Penyelesaian :

1.Tentukan jumlah elemen array A [2][4][3]

= (2) * (4) * (3) = 24

2.@M[m][n][p] = M[0][0][0] + {((m-1)

*(jum.elemen2 * jum.elemen3))

+ ((n-1)*(jum.elemen 3)) + ((p-1)}* L A[2][3][2] = 0011(H) + {((2–1) * 4 * 3) + ((3-1) * 3) +

(2-1)} * 2

= 0011(H) + {12 + 6 + 1 } * 2

= 0011(H) + 38 (D) 26 (H)

= 0011(H) + 26 (H)

= 0037(H)

(80)

Contoh Program array dimensi 3

/*

*Judul Program : Array dimensi 3

*Bahasa Program : Bahasa C

*Pembuat Program : Hendro Pramana Sinaga

*Tanggal Pembuatan : 5 Mei 2012

*/

#include <stdio.h>

#include <conio.h>

main() {

char h=64, nama[5][4][22] = {

"AC

Milan","Barcelona","Porto","Monaco",

"Liverpool","Real Madrid","CSK Moskow","PSG",

"Inter

Milan","Arsenal","Atletico Madrid","Ajax",

"AS Roma","Manchester United","Dortmund","Valencia",

"Manchester City","Bayern Munich","Napoli","Vilareal"

};

printf("Liga Champions : \n\n");

for(i=0; i<5; i++) {

++h;

printf("Grup %c \n", h);

for(s=0; s<4; s++) {

printf(" %d. %s

\n", s+1, nama[i][s]);

}

printf("\n");

}

getch();

}

(81)

Tampilan Program

(82)

Tringular Array dapat merupakan Upper Tringular (seluruh elemen di bawah diagonal utama = 0), ataupun Lower Tringular (seluruh elemen di atas diagonal utama = 0).

Dalam Array Lower Tringular dengan N baris, jumlah maksimum elemen <> 0 pada baris ke-I adalah = I, karenanya total elemen <> 0, tidak lebih dari

NS I = N(N+1) / 2 I=1

TRINGULAR ARRAY

(ARRAY SEGITIGA)

(83)

Gambar (a) Upper Triangular Array (b) Lower Triangular Array

Contoh Tringular Array

(84)

Contoh :

Diketahui suatu array segitiga atas memiliki 3 baris dan kolom, tentukan berapakah jumlah elemen yang bukan nol pada array tersebut.

I = N(N+1) / 2 I = 3 (3+1) / 2

= 12 / 2

= 6

10 20 30 0 40 50 0 0 60

5 10 15 0 20 25 0 0 30

Contoh bentuk array nya adalah seperti dibawah ini :

Dan lain-lain Tringular Array (Lanjut)

(85)

Suatu Array Upper Tringular dan Array Lower Tringular dapat dengan order yang sama, dapat disimpan sebagai suatu array dengan order yang berbeda, Contohnya :

Tringular Array (Lanjut)

(86)

Suatu Array yang sangat banyak elemen nol-nya, contohnya adalah Array A pada Gambar berikut :

SPARSE ARRAY (ARRAY JARANG)

(87)

Latihan

1. Suatu array A dideklarasikan sbb:

Float A[5][5][5] dengan alamat awal A[0][0][0] = 0021(H), berapakah alamat array A[2][3][2] dan A[5][4][3]?

2. Suatu array B dideklarasikan sbb:

Char B[3][4][3] dengan alamat awal A[0][0][0] = 0021(H), berapakah alamat array A[2][3][2] dan A[3][4][3]?

(88)

Pertemuan 5

SINGLE LINKED LIST (Non

Circular)

(89)

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 dengan perubah dinamis (Dinamic variable)

Perubah Dinamis (Dinamic variable)

Suatu perubah yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi.

(90)

Perbedaan Perubah Statis & Dinamis

Pada perubah statis, isi Memory pada lokasi tertentu (nilai perubah) adalah data sesungguhnya yang akan diolah. Pada perubah dinamis, nilai perubah adalah alamat lokasi lain yang menyimpan data sesungguhnya. Dengan demikian data yang sesungguhnya dapat dimasukkan secara langsung.

Dalam hal cara pemasukkan data dapat diilustrasikan seperti dibawah ini

(91)

DEKLARASI POINTER

Pointer digunakan sebagai penunjuk ke suatu alamat memori

Dalam pemrograman C++, Type Data Pointer dideklarasikan dengan bentuk umum :

Type Data * Nama Variabel;

Type Data dapat berupa sembarang type data, misalnya char, int atau float. Sedangkan Nama veriabel merupakan nama variabel pointer

(92)

Contoh penggunaan pointer dalam program C++:

Void main() {

int x,y,*z;

x = 75; //nilai x = 75

y = x; //nilai y diambil dari nilai x

z = &x; //nilai z menunjuk kealamat pointer dari nilai x

getch();

}

(93)

LINKED LIST (LINKED LIST)

Salah satu Struktur Data Dinamis yang paling sederhana adalah Linked List atau Struktur Berkait atau Senarai Berantai, yaitu suatu kumpulan komponen yang disusun secara berurutan dengan bantuan Pointer.

Linked List (Senarai Berantai) disebut juga dengan Senarai Satu Arah (One-Way List). Masing-masing komponen dinamakan dengan Simpul (Node).

(94)

Perbedaan Karakteristik

Array dan Linked List

(95)

Setiap simpul dalam suatu Linked List terbagi menjadi dua bagian,yaitu :

1. Medan Informasi

Berisi informasi yang akan disimpan dan diolah.

2. Medan Penyambung (Link Field)

Berisi alamat berikutnya. Bernilai 0, Jika Link tersebut tidak menunjuk ke Data (Simpul) lainnya. Penunjuk ini disebut Penunjuk Nol.

(96)

Linked juga mengandung sebuah variabel penunjuk List, yang biasanya diberi nama START (AWAL), yang berisi alamat dari simpul pertama dalam List.

LINKED LIST (LINKED LIST) Lanjutan

(97)

Penyajian Linked List dalam Memory

(98)

Penyajian Linked List dalam Memory Lanjutan)

(99)

Bentuk Node

Single Linked List non Circular

• Single : field pointer-nya hanya satu dan satu arah,pada akhir node pointernya menunjuk NULL

• Linked List : node-node tersebut saling terhubung satu sama lain.

Menempati alamat memori tertentu

(100)

Single Linked List Non Circular (Lanjutan)

Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data.

Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.

(101)

Pembuatan

Single Linked List non Circular

Deklarasi Node :

typedef struct TNode{

int data;

TNode *next;

};

Keterangan:

• Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe integer dan field next yang

bertipe pointer dari TNode

(102)

Pembuatan Single Linked List non Circular Lanjutan Setelah pembuatan struct, buat variabel head

yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.

Digunakan perintah new untuk mempersiapkan sebuah node baru berserta alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke NULL.

TNode *baru;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

(103)

Single Linked List non Circular Menggunakan Head

• Dibutuhkan satu buah variabel pointer : head yang akan selalu menunjuk pada node pertama

(104)

Deklarasi Pointer Penunjuk Head Single Linked List

Manipulasi linked list tidak dapat dilakukan langsung ke node yang dituju, melainkan harus menggunakan suatu pointer penunjuk ke node pertama (Head) dalam linked list

Deklarasinya sebagai berikut:

TNode *head;

(105)

Fungsi Inisialisasi Single Linked List

void init() {

head = NULL;

}

Function untuk mengetahui kondisi Single Linked List

Jika pointer head tidak menunjuk pada suatu node maka kosong

int isEmpty() {

if (head == NULL) return 1;

else return 0;

}

(106)

Single Linked List Non Circular dengan Head Menambah Node di Depan

Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara:

node head ditunjukkan ke node baru tersebut.

Prinsipnya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan.

(107)

Single Linked List Non Circular dengan Head

void insertDepan(int databaru) {

TNode *baru;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1) {

head=baru;

head->next = NULL;

} else

{

baru->next = head;

head = baru;

}

printf(”Data masuk\n”);

}

(108)

Ilustrasi Penambahan Node Didepan

(109)

Ilustrasi Penambahan node didepan (lanjutan)

(110)

Single Linked List Non Circular dengan Head Menambah Node di Belakang

Penambahan data dilakukan di belakang, namun pada saat pertama kali, node langsung ditunjuk oleh head.

Penambahan di belakang membutuhkan pointer bantu untuk mengetahui node terbelakang. Kemudian, dikaitkan dengan node baru.

Untuk mengetahui data terbelakang perlu digunakan perulangan.

(111)

Single Linked List Non Circular dengan Head

void insertBelakang (int databaru) {

TNode *baru,*bantu;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1) { head=baru;

head->next = NULL;

}

else {

bantu=head;

while(bantu->next!=NULL){

bantu=bantu->next;

}

bantu->next = baru;

}

printf("Data masuk\n“);

}

(112)

Ilustrasi Penambahan Node Dibelakang

(113)

Ilustrasi Penambahan node di belakang

(114)

Menghapus Node di Depan

• Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus

dilakukan penggunakan suatu pointer lain (hapus) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete.

• Sebelum data terdepan dihapus, terlebih dahulu head harus menunjuk ke node berikutnya agar list tidak putus, sehingga node setelah head lama akan menjadi head baru

• Jika head masih NULL maka berarti data masih kosong!

(115)

Menghapus Node Di depan

void hapusDepan () {

TNode *hapus;

int d;

if (isEmpty()==0){

if(head->next != NULL){

hapus = head;

d = hapus->data;

head = head->next;

delete hapus;

} else {

d = head->data;

head = NULL;

}

printf(“%d terhapus\n“,d);

} else cout<<"Masih kosong\n";

}

(116)

Ilustrasi menghapus node di depan

(117)

Menghapus Node di Belakang

• Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus, pointer bantu untuk menunjuk node sebelum node yang dihapus yang akan menjadi node terakhir.

• Pointer bantu digunakan untuk menunjuk ke nilai NULL.

Pointer bantu selalu bergerak sampai sebelum node yang akan dihapus, kemudian pointer hapus diletakkan setelah pointer bantu. Selanjutnya pointer hapus akan dihapus, pointer bantu akan menunjuk ke NULL.

(118)

Menghapus Node di Belakang

void hapusBelakang(){

TNode *hapus,*bantu;

int d;

if (isEmpty()==0){

if(head->next != NULL){

bantu = head;

while(bantu->next->next!=NULL){

bantu = bantu->next;

}

hapus = bantu->next;

d = hapus->data;

bantu->next = NULL;

delete hapus;

} else {

d = head->data;

head = NULL;

}

printf(“%d terhapus\n“,d);

} else printf(“Masih kosong\n“);

}

(119)

Ilustrasi menghapus node di belakang

(120)

Function untuk menghapus semua elemen Linked List

void clear() {

TNode *bantu,*hapus;

bantu = head;

while(bantu!=NULL) {

hapus = bantu;

bantu = bantu->next;

delete hapus;

}

head = NULL;

}

(121)

Menampilkan / Membaca Isi Linked List

• Linked list ditelusuri satu-persatu dari awal sampai akhir node. Penelusuran dilakukan dengan menggunakan

pointer bantu, karena pointer head yang menjadi tanda awal list tidak boleh berubah/berganti posisi.

• Penelusuran dilakukan terus sampai ditemukan node terakhir yang menunjuk ke nilai NULL.

Jika tidak NULL, maka node bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan menggunakan field next sehingga dapat saling berkait.

• Jika head masih NULL berarti data masih kosong!

(122)

Menampilkan / Membaca Isi Linked List

void tampil(){

TNode *bantu;

bantu = head;

if(isEmpty()==0){

while(bantu!=NULL){

cout<<bantu->data<<"

";

bantu=bantu->next;

}

printf(“\n”);

} else printf(“Masih kosong\n“);

}

(123)

Single Linked List non Circular Menggunakan Head dan Tail

Dibutuhkan dua variabel pointer : head dan tail

Head selalu menunjuk pada node pertama, sedangkan tail selalu menunjuk pada node terakhir.

Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan pointer bantu.

(124)

Single Linked List non Circular Menggunakan Head dan Tail

Inisialisasi Linked List

TNode *head, *tail;

Fungsi Inisialisasi Linked List void init(){

head = NULL;

tail = NULL;

}

Function untuk mengetahui kondisi LinkedList kosong / tidak

int isEmpty(){

if(tail == NULL) return 1;

else return 0;

}

(125)

void insertDepan(int databaru){

TNode *baru;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1){

head=tail=baru;

tail->next=NULL;

} else {

baru->next = head;

head = baru;

}

printf(”Data masuk\n”);

}

Menambah Node di depan dengan Haid dan Tail

(126)

Ilustrasi penambahan node didepan dengan Head dan Tail

(127)

Ilustrasi Penambahan node di depan dengan Head dan Tail

(128)

Menambah Node di Belakang Dengan Head dan Tail

void tambahBelakang(int databaru){

TNode *baru,*bantu;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1){

head=baru;

tail=baru;

tail->next = NULL;

}

else {

tail->next = baru;

tail=baru;

}

printf("Data masuk\n“);

}

(129)

Ilustrasi penambahan node di depan dengan Head dan Tail

(130)

Ilustrasi Penamabahan node di depan dengan Head dan Tail

(131)

Menghapus Node di Depan (Dengan Head dan Tail) Penghapusan node tidak boleh dilakukan jika

keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan pointer hapus pada head, kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi head baru, kemudian menghapus pointer hapus dengan menggunakan perintah delete.

Jika tail masih NULL maka berarti list masih kosong!

(132)

Menghapus Node didepan dengan Head dan Tail

void hapusDepan(){

TNode *hapus;

int d;

if (isEmpty()==0){

if(head!=tail){

hapus = head;

d = hapus->data;

head = head->next;

delete hapus;

} else {

d = tail->data;

head=tail=NULL;

}

printf(“%d terhapus\n“,d);

} else printf("Masih kosong\n“);

}

(133)

Ilustrasi menghapus node didepan dengan Head dan Tail

(134)

Menghapus Node di Belakang (Dengan Head dan Tail)

Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variabel hapus pada tail. Jika tail masih NULL maka berarti list masih kosong!

Dibutuhkan pointer bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail, sehingga tail dapat ditunjukkan ke bantu, dan bantu tersebut akan menjadi tail yang baru.

Setelah itu hapus pointer hapus dengan menggunakan perintah delete.

(135)

Menghapus Node dibelakang dengan Head dan Tail

void hapusBelakang(){

TNode *bantu,*hapus;

int d;

if (isEmpty()==0){

bantu = head;

if(head!=tail){

while(bantu->next!=tail){

bantu = bantu->next;

}

hapus = tail;

tail=bantu;

d = hapus->data;

delete hapus;

tail->next = NULL;

}else {

d = tail->data;

head=tail=NULL;

}

cout<<d<<" terhapus\n";

} else cout<<"Masih kosong\n";

}

(136)

null

Ilustrasi Menghapus node di belakang

(137)

Function untuk menghapus semua elemen LinkedList dengan HEAD & TAIL

void clear() {

TNode *bantu,*hapus;

bantu = head;

while(bantu!=NULL) {

hapus = bantu;

bantu = bantu->next;

delete hapus;

}

head = NULL;

tail = NULL;

}

(138)

Latihan II Soal Struktur Data (Review Materi Pertemuan 5)

Dikumpulkan pada pertemuan selanjutnya

Buatlah Ilustrasi / Penggambaran untuk

menambah dan menghapus node di posisi tengah pada :

1. Single Linked List dengan Head

2. Single Linked List dengan Head & Trail

(139)

Pertemuan 6

STACK atau TUMPUKAN

(140)

Merupakan bentuk khusus dari Linier List yang pemasukan dan penghapusan elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari List (Top)

Prinsip Stack adalah LAST-IN-FIRST-OUT (LIFO).

STACK (TUMPUKAN)

Klik untuk Ilustrasi Stack

(141)

• ISEMPTY

Untuk memeriksa apakah stack kosong

ISFULL

Untuk memeriksa apakah stack sudah penuh

PUSH

Untuk menambahkan item pada posisi paling atas (TOP)

POP

Untuk menghapus item paling atas (TOP)

CLEAR

Untuk mengosongkan stack

OPERASI STACK

(142)

Deklarasi MAX_STACK

#define MAX_STACK 5

Deklarasi STACK dengan struct dan array data typedef struct STACK{

int top;

int data[5];

};

Deklarasi variabel stack dari struct STACK tumpuk;

STACK PADA ARRAY

(143)

TOP = -1 MAX_STACK

4 3 2 1 0

void inisialisasi () {

tumpuk.top = -1 }

Inisialisasi

• Pada mulanya isi top dengan -1, karena array dalam C/C++ dimulai dari 0, berarti stack adalah KOSONG

• TOP adalah variabel penanda dalam STACK yang menunjukkan elemen teratas Stack.

• TOP of STACK akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH

(144)

Fungsi IsEmpty

• Digunakan untuk memeriksa apakah stack masih dalam kondisi kosong

• Dengan cara memeriksa TOP of STACK.

Jika TOP masih = -1 maka berarti stack masih kosong

int IsEmpty () {

if (tumpuk.top == -1 return 1;

else

return 0;

}

4 3 2 1 0

TOP = -1 MAX_STACK

(145)

Fungsi IsFull

• Digunakan untuk memeriksa apakah kondisi stack sudah penuh

• Dengan cara memeriksa TOP of Stack.

Jika TOP of STACK = MAX_STACK-1 maka FULL (Penuh).

Jika TOP of STACK < MAX_STACK-1 maka belum penuh

(146)

Fungsi isFull

E D C B A

4 3 2 1 0

TOP = 4

MAX_STACK

int IsFull () {

if (tumpuk.top == MAX_STACK- 1

return 1;

else

return 0;

}

(147)

Fungsi PUSH

• Digunakan untuk memasukkan elemen ke dalam stack dan selalu menjadi elemen teratas stack

• Dengan cara :

1. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh

2. Isikan nilai baru ke stack berdasarkan indeks TOP of STACK setelah ditambah satu (diincrement)

(148)

Fungsi Push

4 3 2 1 0

TOP = -1

MAX_STACK

void push (char d[5]) {

tumpuk.top++

strcpy(tumpuk.data[tumpuk.top],d);

}

A

4 3 2 1

0 TOP = TOP + 1

= -1 + 1

= 0

MAX_STACK PUSH ELEMEN A

(149)

Fungsi POP

• Digunakan untuk menghapus elemen yang berada pada posisi paling atas dari stack.

Referensi

Dokumen terkait