pert-1-data&struktur data...title pert-1-data&struktur data author komisi mi-bsi created date...

330
Pertemuan 1 DATA & STRUKTUR DATA

Upload: others

Post on 09-Feb-2021

10 views

Category:

Documents


0 download

TRANSCRIPT

  • Pertemuan 1

    DATA &

    STRUKTUR DATA

  • 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

  • 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

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

  • TYPE DATA SEDERHANA

    (Dalam Program C++)

    Type Range Ukuran

    (Byte)

    Integer - 32768..32767 2

    Long - 2147483648..2147483647 4

    1. INTEGER

    Merupakan Bilangan Bulat dan tidak mengandung

    pecahan. seperti : ...-3,-2,-1,0,1,2,3,....

    Type data Integer

  • 2. FLOAT Type data yang merupakan bilangan pecahan.

    Jenis Data float ditulis dgn menggunakan titik(koma) desimal.

    Misalnya : 0.32 4,35 -131.128

    Type Real dapat juga ditulis dengan Rumus :

    M * Re = X

    M = Pecahan, R = Radix,

    e = Exponen, X = Hasil Bilangan,

    Misalnya : 3.2 * 10-1 = 0.32

    4.35 * 102 = 435

    TYPE DATA SEDERHANA

    (Dalam Program C++)

  • TYPE DATA SEDERHANA

    (Dalam Program C++)

    Type data FLOAT

    Type Range Ukuran

    (Byte)

    Float 3.4 x 10 -38 s/d 3.4 x10 +38 4

    Double 1.7 x 10 -308 s/d 1.7x10 +308 8

    Long Double 3.4 x 10 -4932 s/d 1.1x10 + 4932 10

  • 3. BOOL ATAU LOGICAL

    Type data yang hanya mempunyai dua bentuk keluaran

    yaitu nilai True dan False (Benar dan Salah) yang

    dinyatakan dengan 1 dan 0, Sehingga satuan data yang

    terpakai cukup satu bit saja. Operator yang digunakan

    adalah : And, Or dan Not.

  • Bool atau Logical

    Input NOT (!) AND (&&) OR (||)

    A B C !A !B !C A&&B&&C A||B||C

    0 0 0 1 1 1 0 0

    0 0 1 1 1 0 0 1

    0 1 0 1 0 1 0 1

    0 1 1 1 0 0 0 1

    1 0 0 0 1 1 0 1

    1 0 1 0 1 0 0 1

    1 1 0 0 0 1 0 1

    1 1 1 0 0 0 1 1

  • CHARACTER

    Type data yang terdiri dari aksara (simbol)

    yang meliputi digit numerik, character alfabetik

    dan spesial character. Untuk menuliskan tipe

    char, karakter perlu ditulis di dalam tanda petik

    tunggal ( ‘ )

    Contoh :

    ‘A’ karakter berupa huruf A

    ‘1’ karakter berupa angka 1

    ‘*’ karakter simbol *

  • STRING

    Merupakan type data majemuk yang terbentuk dari

    kumpulan character sebanyak 256 (default) dengan

    jangkauan niai 0 - 255. Kumpulan character yang

    digunakan untuk membentuk String dinamakan

    alfabet. Pemberian nilai String diapit dengan

    tanda petik ganda (“)

    Bentuk umum penulisan tipe data ini adalah

    :

    tipe_data pengenal [panjang] ;

    pengenal = nama variabel

    panjang = bilangan bulat yg menunjukan

    jumlah karakter

    Contoh : char nama[15] ;

  • Diharapkan dosen memberikan contoh

    aplikasi programnya

    Fungsi pada Operasi STRING

    1. Strcpy() untuk menyalin nilai string. 2. Strcat() untuk menggabungkan nilai string. 3. Strcmp() untuk membandingkan 2 nilai string. 4. Strlen() untuk mengetahui panjang nilai string. 5. Strchr () untuk mencari nilai karakter dalam string.

  • Operator

    Aritmatika

    Keterangan

    pow Pangkat

    sqrt Menghitung akar

    % Sisa hasil bagi (modulus)

    * , / Perkalian, Pembagian

    + , - Penjumlahan, Pengurangan

    Jenis-jenis Operator Dalam Bahasa C++

  • Jenis-jenis Operator Dalam Bahasa C++

    Operator Pemberi

    Nilai Aritmatika

    Keterangan

    * = Perkalian

    / = Pembagian

    % = Sisa hasil bagi

    + = Penjumlahan

    - = Pengurangan

    Operator

    Logika

    Keterangan

    && Dan (AND)

    || Atau (OR)

    ! Bukan (NOT)

  • Jenis-jenis Operator Dalam Bahasa C++

    Operator Unary Keterangan

    + Tanda Plus

    - Tanda Minus

    Operator Penambah

    & Pengurang

    Keterangan

    ++ Penambahan

    -- Pengurangan

  • Jenis-jenis Operator Dalam Bahasa C++

    Operator

    Relasi

    Keterangan

    = Sama dengan (assignment)

    != Tidak sama dengan

    > Lebih besar

    < Lebih kecil

    == Sama dengan (bukan assignment)

    >= Lebih besar atau sama dengan

  • Jenis-jenis Operator Dalam Bahasa C++

    Operator

    Bitwise

    Keterangan

    ~ NOT

    > Shift Right

    & AND

    ^ XOR

    | OR

  • TYPE TERSTRUKTUR

    (Dalam Program C++)

    Bermanfaat untuk mengelompokkan sejumlah data dengan tipe data yang berlainan.

    Contoh :

    struct data_pegawai

    {

    int nip;

    char nama[25];

    char alamat[40];

    }

  • Latihan Soal Struktur Data

    (Pertemuan 1)

    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 …

    a. Aritmatika d. Relasi

    b. Unary e. Bitwise

    c. Binary

  • 2. ==, =, !=, termasuk dalam operator …

    a. Aritmatika d. Relasi

    b. Unary e. Bitwise

    c. Binary

    3. Type data yang menghasilkan bentuk keluaran nilai

    True dan False (Benar dan Salah) , adalah :

    a. Boolean d. Integer

    b. String e. float

    c. Char

  • 4. void main() { ....(a).... x,y,z; clrscr(); cout x; cout y; z = x + y; cout

  • 5. void main() { int r = 10; int s; clrscr(); s = 10 + ++r; cout

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

  • 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

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

  • 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

  • Array Dimensi Satu

    void main()

    { int bil [5];

    clrscr;

    cout

  • 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

  • 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] ?

  • 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

  • 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

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

  • 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++

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

  • 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

  • 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

  • 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

  • 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

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

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

  • Contoh program array dua dimensi

    #include

    #include

    main()

    {

    int a[3][5];

    for (int i=0;i

  • Contoh program array dua dimensi

    #include

    #include

    main()

    {

    int a[3][5];

    for (int i=0;i

  • 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?

  • Latihan Soal Struktur Data

    (Pertemuan 2)

    1. Setiap elemen dari sebuah Array haruslah mempunyai type data yang sama, termasuk dalam karakteristik array yaitu :

    a. Statis d. Heterogen

    b. Dinamis e. Homogen

    c. Terurut

    2. Array yang sering digunakan dalam menterjemahkan matriks pada pemrograman, adalah array berdimensi :

    a. Satu d. Satu dan Dua

    b. Dua e. Satu dan Tiga

    c. Tiga

  • 2. Array yang sering digunakan dalam menterjemahkan matriks pada pemrograman, adalah array berdimensi :

    a. Satu d. Satu dan Dua

    b. Dua e. Satu dan Tiga

    c. Tiga

    3. Contoh aplikasi array dimensi dua adalah…..

    a. Input data suhu

    b. Input nama hari

    c. Input nilai mahasiswa perkelas dan matakuliah

    d. Input nilai ipk mahasiswa

    e. Input nama bulan

  • 3. Contoh aplikasi array dimensi dua adalah…..

    a. Input data suhu

    b. Input nama hari

    c. Input nilai mahasiswa perkelas dan matakuliah

    d. Input nilai ipk mahasiswa

    e. Input nama bulan

    4. Terdapat Array : A [5][4] maka jumlah elemen Array

    tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 20

    c. 9

  • 4. Terdapat Array : A [5][4] maka jumlah elemen Array tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 20

    c. 9

    5. Diketahui float A[5] dan lokasi awal terletak di alamat 00F(H), maka lokasi A[3] adalah …..

    a. 00FC(H) d. 01B(H)

    b. 017(H) e. 111(H) c. 071(H)

  • 5. Diketahui float A[5] dan lokasi awal terletak di alamat 00F(H), maka lokasi A[3] adalah …..

    a. 00FC(H) d. 01B(H)

    b. 017(H) e. 111(H) c. 071(H)

    1. Setiap elemen dari sebuah Array haruslah

    mempunyai type data yang sama, termasuk dalam karakteristik array yaitu :

    a. Statis d. Heterogen

    b. Dinamis e. Homogen

    c. Terurut

  • Pertemuan 3

    ARRAY

    DIMENSI BANYAK

  • 0

    1

    2

    0 1 2 3 0

    1

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

  • 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

  • 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

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

  • 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

    #include

    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

  • Tampilan Program

  • 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

    N

    S I = N(N+1) / 2

    I=1

    TRINGULAR ARRAY

    (ARRAY SEGITIGA)

  • Gambar (a) Upper Triangular Array

    (b) Lower Triangular Array

    Contoh Tringular Array

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

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

  • Suatu Array yang sangat banyak elemen nol-nya,

    contohnya adalah Array A pada Gambar berikut :

    SPARSE ARRAY (ARRAY JARANG)

  • 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]?

  • 1. Array yang sangat banyak elemen nol-nya, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

    2 Array yang seluruh elemen dibawah diagonal utamanya = 0, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

    Latihan Soal Struktur Data

    (Pertemuan 3)

  • 2 Array yang seluruh elemen dibawah diagonal utamanya = 0, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

    3. Terdapat Array : A [3][4][5] maka jumlah elemen Array tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 60

    c. 12

  • 3. Terdapat Array : A [3][4][5] maka jumlah elemen Array

    tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 60

    c. 12

    4. Diketahui suatu array segitiga memiliki 4 baris dan

    kolom. Jumlah elemen yang bukan nol pada array

    segitiga tersebut adalah …..

    a. 10 d. 16

    b. 8 e. 20

    c. 4

  • 4. Diketahui suatu array segitiga memiliki 4 baris dan kolom. Jumlah elemen yang bukan nol pada array segitiga tersebut adalah …..

    a. 10 d. 16

    b. 8 e. 20

    c. 4

    5. Deklarasi Array X adalah int A [2][4][5], dengan alamat awal index A[0][0][0] berada di 0021(H) dan ukuran type data int = 2 Tentukan berapa alamat array di A[2][2][2] ?

    a. 0034(H) d. 0052(H)

    b. 0022(H) e. 0034(H)

    c. 0055(H)

  • 5. Deklarasi Array X adalah int A [2][4][5], dengan alamat awal index A[0][0][0] berada di 0021(H) dan ukuran type data int = 2 Tentukan berapa alamat array di A[2][2][2] ?

    a. 0034(H) d. 0052(H)

    b. 0022(H) e. 0034(H)

    c. 0055(H)

    1. Array yang sangat banyak elemen nol-nya, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

  • Pertemuan 4

    SINGLE LINKED LIST (Non

    Circular)

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

  • 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

  • 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

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

    }

  • 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).

  • Perbedaan Karakteristik

    Array dan Linked List

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

  • 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

  • Penyajian Linked List dalam Memory

  • Penyajian Linked List dalam Memory Lanjutan)

  • 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

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

  • 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

  • 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;

  • Single Linked List non Circular

    Menggunakan Head

    • Dibutuhkan satu buah variabel pointer : head yang akan

    selalu menunjuk pada node pertama

  • 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;

  • 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;

    }

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

  • 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”);

    }

  • Ilustrasi Penambahan Node Didepan

  • Ilustrasi Penambahan node didepan (lanjutan)

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

  • 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“);

    }

  • Ilustrasi Penambahan Node Dibelakang

  • Ilustrasi Penambahan node di belakang

  • 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!

  • 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

  • Ilustrasi menghapus node di depan

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

  • 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“);

    }

  • Ilustrasi menghapus node di belakang

  • 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;

    }

  • 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!

  • Menampilkan / Membaca

    Isi Linked List

    void tampil(){

    TNode *bantu;

    bantu = head;

    if(isEmpty()==0){

    while(bantu!=NULL){

    cout

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

  • 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;

    }

  • 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

  • Ilustrasi penambahan node didepan dengan Head

    dan Tail

  • Ilustrasi Penambahan node di depan dengan Head

    dan Tail

  • 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“);

    }

  • Ilustrasi penambahan node di depan dengan Head

    dan Tail

  • Ilustrasi Penamabahan node di depan dengan Head

    dan Tail

  • 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!

  • 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“);

    }

  • Ilustrasi menghapus node didepan dengan Head

    dan Tail

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

  • 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

  • null

    Ilustrasi Menghapus node di belakang

  • 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;

    }

  • Latihan Soal I Struktur Data

    (Pertemuan 4)

    1. Diketahui suatu deklarasi variabel int x,y,*z;

    variabel yang merupakan penunjuk ke pointer adalah :

    a. x d. x dan y

    b. y e. x, y dan z

    c. z

    2. Perintah yang tepat untuk mempersiapkan sebuah node baru berserta alokasi memorinya, adalah ….

    a. Create d. New

    b. Null e. Insert

    c. Input

  • 2. Perintah yang tepat untuk mempersiapkan sebuah node baru berserta alokasi memorinya, adalah ….

    a. Create d. New

    b. Null e. Insert

    c. Input

    3. Jika Tail = Null, maka kondisi Linked List adalah :

    a. Penuh d. Tidak dapat ditambah

    b. Kosong e. Baru

    c. Terisi

  • 3. Jika Tail = Null, maka kondisi Linked List adalah :

    a. Penuh d. Tidak dapat ditambah

    b. Kosong e. Baru

    c. Terisi

    4.

    Gambar diatas menunjukkan bentuk penghapusan node pada posisi :

    a. Belakang d. Tengah dan Depan

    b. Depan e. Depan dan Belakang

    c. Tengah

  • 4.

    Gambar diatas menunjukkan bentuk penambahan node pada posisi :

    a. Belakang d. Tengah dan Depan

    b. Depan e. Depan dan Belakang

    c. Tengah

    5. Perintah yang tepat untuk menyatakan Linked list berada dalam kondisi kosong, adalah ….

    a. head=tail d. bantu=head

    b. head=tail=null e. bantu=tail

    c. bantu=null

  • 5. Perintah yang tepat untuk menyatakan Linked list berada dalam kondisi kosong, adalah ….

    a. head=tail d. bantu=head

    b. head=tail=null e. bantu=tail

    c. bantu=null

    1. Diketahui suatu deklarasi variabel int x,y,*z;

    variabel yang merupakan penunjuk ke pointer adalah :

    a. x d. x dan y

    b. y e. x, y dan z

    c. z

  • Latihan II Soal Struktur Data

    (Review Materi Pertemuan 4)

    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

  • Pertemuan 5

    STACK atau TUMPUKAN

  • 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

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

  • 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

  • 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

  • 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

  • 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

  • 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;

    }

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

  • 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

  • Fungsi POP

    • Digunakan untuk menghapus elemen yang berada pada

    posisi paling atas dari stack.

    • Dengan cara :

    1. Ambil dahulu nilai elemen teratas stack dengan

    mengakses TOP of STACK.

    2. Tampilkan nilai yang akan diambil.

    3. Lakukan decrement nilai TOP of STACK

    sehingga jumlah elemen stack berkurang 1

  • Fungsi POP

    B

    A

    4

    3

    2

    1

    0

    void pop ()

    {

    printf(“Data yg di POP = %s\n”, tumpuk.data[tumpuk.top]);

    tumpuk.top--;

    }

    C

    B

    A

    4

    3

    2

    1

    0

    TOP = 2

    MAX_STACK Data yg di POP = C

    TOP = TOP - 1

    = 2 - 1

    = 1

  • Fungsi CLEAR

    • Digunakan untuk mengosongkan stack / membuat stack

    hampa sehingga Top pada Stack berada kembali di

    posisi Top = -1

    void clear ()

    {

    tumpuk.data=tumpuk.top=-1

    printf(“Data clear”);

    }

    4

    3

    2

    1

    0

  • Diketahui suatu stack dgn max_stack = 6

    1. Bila dilakukan PUSH 3 elemen kedalam stack, kemudian di PUSH lagi 2 elemen dan di POP 3 elemen. Maka dimana posisi Top of Stack ?

    2. IsEmpty pada kondisi terakhir adalah ?

    3. Dari kondisi diatas, Berapa elemen yg hrs di PUSH unt mencapai kondisi penuh Top of Stack = max_stack ?

    4. Berapa elemen yg hrs di POP unt mencapai kondisi IsEmpty = True

    Latihan I Struktur Data

    (Pertemuan 5)

    Jawaban dibahas dgn

    menggunakan contoh program

  • Contoh Program Stack

    klikdisini

    program stack.cpp

  • Latihan Soal II

    Struktur Data (Pertemuan 5)

    1. Operasi Stack yang digunakan untuk memeriksa apakah stack sudah penuh, adalah ….. a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

    2. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh, merupakan langkah awal pada operasi STACK yaitu …..

    a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

  • 2. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh, merupakan langkah awal pada operasi STACK …..

    a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

    3. Jika pada stack terdapat kondisi TOP of STACK = MAX_STACK - 1 maka stack berada dalam keadaan ...

    a. ISEMPTY d. RETREIVE b. CLEAR e. FULL c. TOP

  • 3. Jika pada stack terdapat kondisi TOP of STACK = MAX_STACK - 1 maka stack berada dalam keadaan ...

    a. ISEMPTY d. RETREIVE b. CLEAR e. FULL c. TOP

    4. Pada saat awal, Top of Stack selalu bernilai :

    a. Top = 0 d. Top = Max_Stack

    b. Top = 1 e. Top = Max_Stack - 1

    c. Top = -1

  • 4. Pada saat awal, Top of Stack selalu bernilai :

    a.Top = 0 d. Top = Max_Stack

    b. Top = 1 e. Top = Max_Stack - 1

    c. Top = -1

    5. Diberikan perintah/instruksi pada program C++, yaitu tumpuk.top++; Maksud dari perintah/instruksi tersebut adalah ….

    a. Top = Top + 1 d. Top = - 1

    b. Top = Top - 1 e. Top = 1

    c. Top = 0

  • 5. Diberikan perintah/instruksi pada program C++, yaitu tumpuk.top++; Maksud dari perintah/instruksi tersebut adalah ….

    a. Top = Top + 1 d. Top = - 1

    b. Top = Top - 1 e. Top = 1

    c. Top = 0

    1. Operasi Stack yang digunakan untuk memeriksa

    apakah stack sudah penuh, adalah ….. a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

  • Pertemuan 6

    QUEUE (ANTREAN)

  • Struktur Data Antrean (Queue) adalah suatu bentuk

    khusus dari List Linier dengan operasi pemasukan data

    hanya diperbolehkan pada salah satu sisi, yang disebut

    sisi Belakang / ekor (Tail) dan operasi penghapusan

    hanya diperbolehkan pada sisi lainnya yang disebut sisi

    Depan / kepala (Head) dari LinkedList.

    Prinsip Antrean : FIFO (First In First Out)

    FCFS (First Come First Serve)

    “Yang Tiba lebih awal Maka akan dilayani Terlebih

    Dahulu”

    PENGERTIAN QUEUE

    (ANTREAN)

  • Deklarasi Queue

    0 1 2 3 4 5 6 7 Max = 8

    head = -1

    tail = -1

  • • CREATE

    Untuk menciptakan dan menginisialisasi Queue

    Dengan cara membuat Head dan Tail = -1

    • ISEMPTY

    Untuk memeriksa apakah queue kosong

    • ISFULL

    Untuk memeriksa apakah queue sudah penuh

    • ENQUEUE

    Untuk menambahkan item pada posisi paling belakang

    • DEQUEUE

    Untuk menghapus item dari posisi paling depan

    • CLEAR

    Untuk mengosongkan queue

    OPERASI QUEUE

  • Digunakan untuk membentuk dan menunjukan awal

    terbentuknya suatu Antrean / Queue

    0 1 2 3 4 5 6 7 Max = 8

    head = -1

    tail = -1

    Antrian pertama kali

    Void Create()

    {

    antrian.head = antrian.tail = -1

    }

    Fungsi Create

  • Fungsi IsEmpty

    • Untuk memeriksa apakah Antrian penuh atau

    kosong

    • Dengan cara memeriksa nilai Tail, jika Tail = -1

    maka antrian kosong (empty)

    • Head adalah tanda untuk kepala antrian

    (elemen pertama dalam antrian) yang

    tidak akan berubah-ubah

    • Pergerakan pada Antrian terjadi dengan

    penambahan elemen Antrian kebelakang,

    yaitu menggunakan nilai Tail

  • 0 1 2 3 4 5 6 7 Max = 8

    head = -1

    tail = -1

    Antrian kosong

    Karena tail = -1

    Int IsEmpty()

    {

    if (antrian.tail == -1)

    return 1;

    else

    return 0;

    }

    Fungsi IsEmpty

  • Fungsi IsFull

    Untuk mengecek apakah Antrian sudah penuh atau

    belum

    Dengan cara :

    - Mengecek nilai Tail

    - Jika tail = MAX-1 berarti antrian sudah penuh

    (MAX-1 adalah batas elemen array dalam

    program C++)

  • 5 10 35 20 15 30 40 25

    0 1 2 3 4 5 6 7 Max = 8

    head = 0 Antrian penuh karena

    Head = 0

    tail = max - 1

    tail = 7

    Int IsFull()

    {

    if (antrian.tail == Max-1)

    return 1;

    else

    return 0;

    }

    Fungsi IsFull

  • Fungsi Enqueue

    • Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu dilakukan pada

    elemen paling belakang

    • Penambahan elemen selalu menggerakan variabel

    Tail dengan cara menambahkan Tail terlebih dahulu

  • Fungsi Enqueue

  • Fungsi Dequeue

    • Digunakan untuk menghapus elemen terdepan (head) dari Antrian

    • Dengan cara : menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1. Penggeseran dilakukan dengan menggunakan looping

  • Fungsi Dequeue

  • Fungsi Clear

    • Untuk menghapus elemen-elemen Antrian dengan

    cara membuat Tail dan Head = -1

    • Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca sehingga mengembalikan antrian seperti keadaan semula

  • Antrian setelah di lakukan Clear

    0 1 2 3 4 5 6 7 Max = 8

    head = -1

    tail = -1

    Antrian kosong

    Karena tail = -1

    Fungsi Clear

  • Berikan gambaran/ilustrasi dari kasus antrian berikut :

    a) Diketahui suatu Antrian/queue dgn max = 6.

    b) Lakukan Enqueue 4 elemen ke dalam antrian, dimanakah posisi Head dan Tail ?

    c) Kemudian lakukan Dequeue 2 elemen dari antrian. Maka dimana posisi Head dan Tail ?

    d) Dari keadaan diatas, bagaimanakah kondisi IsFull dan IsEmpty nya ?

    Latihan I Struktur Data

    (Pertemuan 6)

    Jawaban dibahas dgn

    menggunakan contoh program

  • Contoh program queue

    klikdisini

    program queue.cpp

  • Latihan Soal II Struktur Data

    (Pertemuan 6)

    1. Operasi pada Antrian yang digunakan untuk menambahkan item pada posisi paling belakang, adalah …

    a. Create d. Enqueue

    b. Clear e. Dequeue

    c. Tail

    2. Perintah IsFull pada antrian digunakan untuk :

    a. Memeriksa apakah antrian sudah penuh

    b. Memeriksa apakah Antrian penuh atau kosong

    c. Menambahkan elemen ke dalam Antrian

    d. Menghapus elemen dari dalam Antrian

    e. Memeriksa apakah antrian sudah kosong

  • 2. Perintah IsFull pada antrian digunakan untuk :

    a. Memeriksa apakah antrian sudah penuh

    b. Memeriksa apakah Antrian penuh atau kosong

    c. Menambahkan elemen ke dalam Antrian

    d. Menghapus elemen dari dalam Antrian

    e. Memeriksa apakah antrian sudah kosong

    3. Yang tidak termasuk dalam operasi antrian, adalah ...

    a. Clear d. Push

    b. Enqueue e. Dequeue

    c. IsFull

  • 3. Yang tidak termasuk dalam operasi antrian, adalah ...

    a. Clear d. Push

    b. Enqueue e. Dequeue

    c. IsFull

    4. Menghapus elemen dari antrian dilakukan dari posisi :

    a. Tengah / Middle d. Belakang / Tail

    b. Depan / Head e. Atas / Top

    c. Bawah / bottom

  • 4. Menghapus elemen dari antrian dilakukan dari posisi :

    a. Tengah / Middle d. Belakang / Tail

    b. Depan / Head e. Atas / Top

    c. Bawah / bottom

    5. Maksud dari perintah program antrian.head=antrian.tail=-1; adalah untuk ......

    a. Menambah elemen antrian

    b Mengecek kondisi antrian kosong atau tidak

    c. Mengecek kondisi antrian penuh atau tidak

    d. Membentuk atau menghapus semua elemen antrian

    e. Menghapus elemen antrian

  • 5. Maksud dari perintah program antrian.head=antrian.tail=-1; adalah untuk ......

    a. Menambah elemen antrian

    b Mengecek kondisi antrian kosong atau tidak

    c. Mengecek kondisi antrian penuh atau tidak

    d. Membentuk atau menghapus semua elemen antrian

    e. Menghapus elemen antrian

    1. Operasi pada Antrian yang digunakan untuk menambahkan item pada posisi paling belakang, adalah …

    a. Create d. Enqueue

    b. Clear e. Dequeue

    c. Tail

  • Pertemuan 7

    REVIEW & 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 …

    a. Aritmatika d. Relasi

    b. Unary e. Bitwise

    c. Binary

  • 2. ==, =, !=, termasuk dalam operator …

    a. Aritmatika d. Relasi

    b. Unary e. Bitwise

    c. Binary

    3. Type data yang menghasilkan bentuk keluaran nilai

    True dan False (Benar dan Salah) , adalah :

    a. Boolean d. Integer

    b. String e. float

    c. Char

  • 3. Type data yang menghasilkan bentuk keluaran

    nilai True dan False (Benar dan Salah) , adalah :

    a. Boolean d. Integer

    b. String e. float

    c. Char

    4. void main() { ....(a).... x,y,z; clrscr(); cout x; cout y; z = x + y; cout

  • 4. void main() { ....(a).... x,y,z; clrscr(); cout x; cout y; z = x + y; cout

  • 5. void main() { int r = 10; int s; clrscr(); s = 10 + ++r; cout

  • 5. void main() { int r = 10; int s; clrscr(); s = 10 + ++r; cout

  • 6. Setiap elemen dari sebuah Array haruslah mempunyai type data yang sama, termasuk dalam karakteristik array yaitu :

    a. Statis d. Heterogen

    b. Dinamis e. Homogen

    c. Terurut

    7. Array yang sering digunakan dalam menterjemahkan matriks pada pemrograman, adalah array berdimensi :

    a. Satu d. Satu dan Dua

    b. Dua e. Satu dan Tiga

    c. Tiga

  • 7. Array yang sering digunakan dalam menterjemahkan matriks pada pemrograman, adalah array berdimensi :

    a. Satu d. Satu dan Dua

    b. Dua e. Satu dan Tiga

    c. Tiga

    8. Contoh aplikasi array dimensi dua adalah…..

    a. Input data suhu

    b. Input nama hari

    c. Input nilai mahasiswa perkelas dan matakuliah

    d. Input nilai ipk mahasiswa

    e. Input nama bulan

  • 8. Contoh aplikasi array dimensi dua adalah…..

    a. Input data suhu

    b. Input nama hari

    c. Input nilai mahasiswa perkelas dan matakuliah

    d. Input nilai ipk mahasiswa

    e. Input nama bulan

    9. Terdapat Array : A [5][4] maka jumlah elemen Array

    tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 20

    c. 9

  • 9. Terdapat Array : A [5][4] maka jumlah elemen Array tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 20

    c. 9

    10. Diketahui float A[5] dan lokasi awal terletak di alamat 00F(H), maka lokasi A[3] adalah …..

    a. 00FC(H) d. 01B(H)

    b. 017(H) e. 111(H) c. 071(H)

  • 11. Array yang sangat banyak elemen nol-nya, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

    10. Diketahui float A[5] dan lokasi awal terletak di alamat 00F(H), maka lokasi A[3] adalah …..

    a. 00FC(H) d. 01B(H) b. 017(H) e. 111(H) c. 071(H)

  • 11. Array yang sangat banyak elemen nol-nya, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

    12 Array yang seluruh elemen dibawah diagonal utamanya = 0, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

  • 12 Array yang seluruh elemen dibawah diagonal utamanya = 0, dikenal sebagai :

    a. Upper tringular Array d. One Dimensional Array

    b. Lower tringular Array e. Multi Dimensional Array

    c. Sparse Array

    13. Terdapat Array : A [3][4][5] maka jumlah elemen Array tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 60

    c. 12

  • 13. Terdapat Array : A [3][4][5] maka jumlah elemen Array

    tersebut adalah ……

    a. 25 d. 15

    b. 35 e. 60

    c. 12

    14. Diketahui suatu array segitiga memiliki 4 baris dan

    kolom. Jumlah elemen yang bukan nol pada array

    segitiga tersebut adalah …..

    a. 10 d. 16

    b. 8 e. 20

    c. 4

  • 14. Diketahui suatu array segitiga memiliki 4 baris dan kolom. Jumlah elemen yang bukan nol pada array segitiga tersebut adalah …..

    a. 10 d. 16

    b. 8 e. 20

    c. 4

    15. Deklarasi Array X adalah int A [2][4][5], dengan alamat awal index A[0][0][0] berada di 0021(H) dan ukuran type data int = 2 Tentukan berapa alamat array di A[2][2][2] ?

    a. 0034(H) d. 0052(H)

    b. 0022(H) e. 0034(H)

    c. 0055(H)

  • 15. Deklarasi Array X adalah int A [2][4][5], dengan alamat awal index A[0][0][0] berada di 0021(H) dan ukuran type data int = 2 Tentukan berapa alamat array di A[2][2][2] ?

    a. 0034(H) d. 0052(H)

    b. 0022(H) e. 0034(H)

    c. 0055(H) 16. Diketahui suatu deklarasi variabel int x,y,*z;

    variabel yang merupakan penunjuk ke pointer adalah :

    a. x d. x dan y

    b. y e. x, y dan z

    c. z

  • 16. Diketahui suatu deklarasi variabel int x,y,*z;

    variabel yang merupakan penunjuk ke pointer adalah :

    a. x d. x dan y

    b. y e. x, y dan z

    c. z

    17. Perintah yang tepat untuk mempersiapkan sebuah node baru berserta alokasi memorinya, adalah ….

    a. Create d. New

    b. Null e. Insert

    c. Input

  • 17. Perintah yang tepat untuk mempersiapkan sebuah node baru berserta alokasi memorinya, adalah ….

    a. Create d. New

    b. Null e. Insert

    c. Input

    18. Jika Tail = Null, maka kondisi Linked List adalah :

    a. Penuh d. Tidak dapat ditambah

    b. Kosong e. Baru

    c. Terisi

  • 18. Jika Tail = Null, maka kondisi Linked List adalah :

    a. Penuh d. Tidak dapat ditambah

    b. Kosong e. Baru

    c. Terisi

    19.

    Gambar diatas menunjukkan bentuk penghapusan node pada posisi :

    a. Belakang d. Tengah dan Depan

    b. Depan e. Depan dan Belakang

    c. Tengah

  • 19.

    Gambar diatas menunjukkan bentuk penambahan node pada posisi :

    a. Belakang d. Tengah dan Depan

    b. Depan e. Depan dan Belakang

    c. Tengah

    20. Perintah yang tepat untuk menyatakan Linked list berada dalam kondisi kosong, adalah ….

    a. head=tail d. bantu=head

    b. head=tail=null e. bantu=tail

    c. bantu=null

  • 20. Perintah yang tepat untuk menyatakan Linked list berada dalam kondisi kosong, adalah ….

    a. head=tail d. bantu=head

    b. head=tail=null e. bantu=tail

    c. bantu=null

    21. Operasi Stack yang digunakan untuk memeriksa

    apakah stack sudah penuh, adalah ….. a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

  • 21. Operasi Stack yang digunakan untuk memeriksa apakah stack sudah penuh, adalah ….. a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

    22. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh, merupakan langkah awal pada operasi STACK yaitu …..

    a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR

  • 22. Menambah satu (increment) nilai TOP of STACK setiap ada penambahan elemen stack selama stack masih belum penuh, merupakan langkah awal pada operasi STACK …..

    a. PUSH d. ISEMPTY

    b. POP e. ISFULL

    c. CLEAR 23. Jika pada stack terdapat kondisi TOP of STACK =

    MAX_STACK - 1 maka stack berada dalam keadaan ...

    a. ISEMPTY d. RETREIVE b. CLEAR e. FULL c. TOP

  • 23. Jika pada stack terdapat kondisi TOP of STACK = MAX_STACK - 1 maka stack berada dalam keadaan ...

    a. ISEMPTY d. RETREIVE b. CLEAR e. FULL c. TOP

    24. Pada saat awal, Top of Stack selalu bernilai :

    a. Top = 0 d. Top = Max_Stack

    b. Top = 1 e. Top = Max_Stack - 1

    c. Top = -1

  • 24. Pada saat awal, Top of Stack selalu bernilai :

    a. Top = 0 d. Top = Max_Stack

    b. Top = 1 e. Top = Max_Stack - 1

    c. Top = -1

    25. Diberikan perintah/instruksi pada program C++, yaitu tumpuk.top++; Maksud dari perintah/instruksi tersebut adalah ….

    a. Top = Top + 1 d. Top = - 1

    b. Top = Top - 1 e. Top = 1

    c. Top = 0

  • 25. Diberikan perintah/instruksi pada program C++, yaitu tumpuk.top++; Maksud dari perintah/instruksi tersebut adalah ….

    a. Top = Top + 1 d. Top = - 1

    b. Top = Top - 1 e. Top = 1

    c. Top = 0

    26. Operasi pada Antrian yang digunakan untuk menambahkan item pada posisi paling belakang, adalah …

    a. Create d. Enqueue

    b. Clear e. Dequeue

    c. Tail

  • 26. Operasi pada Antrian yang digunakan untuk menambahkan item pada posisi paling belakang, adalah …

    a. Create d. Enqueue

    b. Clear e. Dequeue

    c. Tail

    27. Perintah IsFull pada antrian digunakan untuk :

    a. Memeriksa apakah antrian sudah penuh

    b. Memeriksa apakah Antrian penuh atau kosong

    c. Menambahkan elemen ke dalam Antrian

    d. Menghapus elemen dari dalam Antrian

    e. Memeriksa apakah antrian sudah kosong

  • 27. Perintah IsFull pada antrian digunakan untuk :

    a. Memeriksa apakah antrian sudah penuh

    b. Memeriksa apakah Antrian penuh atau kosong

    c. Menambahkan elemen ke dalam Antrian

    d. Menghapus elemen dari dalam Antrian

    e. Memeriksa apakah antrian sudah kosong

    28. Yang tidak termasuk dalam operasi antrian, adalah ...

    a. Clear d. Push

    b. Enqueue e. Dequeue

    c. IsFull

  • 28. Yang tidak termasuk dalam operasi antrian, adalah ...

    a. Clear d. Push

    b. Enqueue e. Dequeue

    c. IsFull

    29. Menghapus elemen dari antrian dilakukan dari posisi :

    a. Tengah / Middle d. Belakang / Tail

    b. Depan / Head e. Atas / Top

    c. Bawah / bottom

  • 29. Menghapus elemen dari antrian dilakukan dari posisi :

    a. Tengah / Middle d. Belakang / Tail

    b. Depan / Head e. Atas / Top

    c. Bawah / bottom

    30. Maksud dari perintah program antrian.head=antrian.tail=-1; adalah untuk ......

    a. Menambah elemen antrian

    b Mengecek kondisi antrian kosong atau tidak

    c. Mengecek kondisi antrian penuh atau tidak

    d. Membentuk atau menghapus semua elemen antrian

    e. Menghapus elemen antrian

  • 30. Maksud dari perintah program antrian.head=antrian.tail=-1; adalah untuk ......

    a. Menambah elemen antrian

    b Mengecek kondisi antrian kosong atau tidak

    c. Mengecek kondisi antrian penuh atau tidak

    d. Membentuk atau menghapus semua elemen antrian

    e. Menghapus elemen antrian

    1. Type data dibawah ini, yang tidak termasuk dalam tipe

    data sederhana tunggal, adalah :

    a. Boolean d. Integer

    b. String e. float

    c. Char

  • Pertemuan 9

    STRUKTUR POHON &

    KUNJUNGAN POHON BINER

  • Pohon (Tree) termasuk struktur non linear yang

    didefinisikan sebagai data yang terorganisir dari suatu

    item informasi cabang yang saling terkait

    Root

    E

    B C

    F

    A

    G

    D

    H

    Level

    DEFINISI POHON (TREE)

    ---------------------------------- 1

    ----------------------- 2

    ------------------ 3

    Height = 3

  • 1. Predesesor

    Node yang berada diatas node tertentu.

    (contoh : B predesesor dari E dan F)

    2. Succesor

    Node yang berada dibawah node tertentu.

    (contoh : E dan F merupakan succesor dari B)

    3. Ancestor

    Seluruh node yang terletak sebelum node tertentu dan

    terletak pada jalur yang sama.

    (contoh : A dan B merupakan ancestor dari F)

    Istilah – istilah Dalam Pohon

  • 4. Descendant

    Seluruh node yang terletak sesudah node tertentu

    dan terletak pada jalur yang sama.

    (contoh : F dan B merupakan ancestor dari A)

    5. Parent

    Predesesor satu level diatas satu node

    (contoh : B merupakan parent dari F)

    6. Child

    Succesor satu level dibawah satu node

    (contoh : F merupakan child dari B)

    7. Sibling

    Node yang memiliki parent yang sama dengan satu

    node (contoh : E dan F adalah sibling)

  • 8. Subtree

    Bagian dari tree yang berupa suatu node beserta

    descendant-nya (contoh : Subtree B, E, F dan

    Subtree D, G, H)

    9. Size

    Banyaknya node dalam suatu tree (contoh : gambar

    tree diatas memiliki size = 8)

    10. Height

    Banyaknya tingkat/level dalam suatu tree (contoh :

    gambar tree diatas memiliki height = 3)

  • 11. Root (Akar)

    Node khusus dalam tree yang tidak memiliki

    predesesor (Contoh : A)

    12. Leaf (Daun)

    Node-node dalam tree yang tidak memiliki daun

    (contoh : Node E,F,C,G,H)

    13. Degree (Derajat)

    Banyaknya child yang dimiliki oleh suatu node

    (contoh : Node A memiliki derajat 3, node B memiliki

    derajat 2)

  • Pohon atau Tree adalah salah satu bentuk Graph

    terhubung yang tidak mengandung sirkuit.

    Karena merupakan Graph terhubung, maka pada Pohon

    (Tree) selalu terdapat Path atau Jalur yang

    menghubungkan setiap simpul dalam dua pohon.

    Pohon (Tree) dapat juga didefinisikan sebagai kumpulan

    elemen yang salah satu elemennya disebut dengan Akar

    (Root) dan sisa elemen lain (Simpul) yang terpecah menjadi sejumlah himpunan yang saling tidak berhubungan

    yang disebut dengan Subpohon (Subtree) atau cabang

    ISTILAH-ISTILAH DASAR

  • 1. Jika Pohon mempunyai Simpul sebanyak n, maka

    banyaknya ruas atau edge adalah (n-1).

    2. Mempunyai Simpul Khusus yang disebut Root, jika

    Simpul tersebut memiliki derajat keluar >= 0, dan

    derajat masuk = 0.

    3. Mempunyai Simpul yang disebut sebagai Daun / Leaf,

    jika Simpul tersebut berderajat keluar = 0, dan

    berderajat masuk = 1.

    4. Setiap Simpul mempunyai Tingkatan / Level yang dimulai

    dari Root yang Levelnya = 1 sampai dengan Level ke - n

    pada daun paling bawah. Simpul yang mempunyai Level

    sama disebut Bersaudara atau Brother atau Stribling.

    Sifat utama Pohon Berakar

  • 5. Pohon mempunyai Ketinggian atau Kedalaman atau

    Height, yang merupakan Level tertinggi

    6. Pohon mempunyai Weight atau Berat atau Bobot, yang

    banyaknya daun (leaf) pada Pohon.

    7. Banyaknya Simpul Maksimum sampai Level N adalah :

    2 (N) - 1

    8. Banyaknya Simpul untuk setiap Level I adalah :

    N

    2 ( I – 1)

    I = 1

    Hutan (Forest) adalah kumpulan Pohon yang tidak saling

    berhubungan

  • Diketahui suatu bentuk Pohon Berakar T sebagai berikut :

    Pohon Diatas Mempunyai :

    a. Simpul sebanyak = 8 dan edge = n - 1 = 8 – 1 = 7

    b. Root pada Pohon T diatas adalah Simpul P

    c. Mempunyai daun (Leaf) = 4, yaitu = R, S, V dan W

  • d. Level (tingkatan) Pohon = 4 yaitu :

    Level 1 = Simpul P

    Level 2 = Simpul Q dan T

    Level 3 = Simpul R, S dan U

    Level 4 = Simpul V dan W

    e. Ketinggian atau kedalaman = jumlah level = 4

    f. Weight atau berat atau bobot = jumlah daun = 4

    Dalam gambar Pohon T diatas dapat dibentuk 2 buah

    hutan (forest), bila simpul P dihilangkan, yaitu :

    Hutan 1 : Q,R,S

    Hutan 2 : T,U,V,W

  • g. Banyaknya Simpul Maksimum yang dapat terbentuk

    sampai Level 4 (bila simpul pada pohon dianggap

    penuh) adalah : 2 (N) – 1

    2 (4) – 1 = 16 – 1 = 15

  • h. Banyaknya Simpul maksimum untuk setiap Level I

    (bila simpul pada pohon dianggap penuh) adalah :

    Maksimum Simpul pada level 2 = 2 ( I – 1)

    = 2 (2-1) = 2

    Maksimum Simpul pada level 3 = 2 (3-1) = 4

    Maksimum Simpul pada level 4 = 2 (4-1) = 2

  • Struktur ini biasanya digunakan untuk menyajikan data

    yang mengandung hubungan hirarkial antara elemen-

    elemennya.

    Bentuk Pohon Berakar yang lebih mudah dikelola dalam

    komputer adalah Pohon Biner (Binary Tree) yang lebih

    dikenal sebagai Pohon Umum (General Tree) yang dapat

    didefinisikan sebagai kumpulan simpul yang mungkin

    kosong atau mempunyai akar dan dua Subpohon yang

    saling terpisah yang disebut dengan Subpohon Kiri /

    cabang kiri (Left Subtree) dan Subpohon Kanan / cabang

    kanan (Right Subtree).

    POHON BINAR (BINARY TREE)

  • Karakteristik Pohon Binar (Binary Tree) :

    1. Setiap Simpul paling banyak hanya memiliki dua buah

    anak

    2. Derajat Tertinggi dari setiap Simpul adalah dua.

    3. Dibedakan antara Cabang Kiri dan Cabang Kanan.

    4. Dimungkinkan tidak mempunyai Simpul

    Berikut ini diberikan contoh gambar Pohon Binar (Binary

    Tree) dengan Cabang Kiri dan Cabang Kanan.

  • ISTILAH PADA POHON BINER

    • Pohon Biner Penuh

    (Full Binary Tree)

    Semua simpul (kecuali daun)

    memiliki 2 anak dan tiap cabang

    memiliki panjang ruas yang sama

    A

    B C

    D E F G

    • Pohon Biner Lengkap

    (Complete Binary Tree)

    Hampir sama dengan Pohon Biner Penuh, semua simpul (kecuali daun) memiliki 2 anak tetapi tiap cabang memiliki panjang ruas berbeda

    A

    B C

    D E

  • ISTILAH PADA POHON BINER

    • Pohon Biner Similer

    Dua pohon yang memiliki struktur yang sama tetapi

    informasinya berbeda

    A

    B C

    • Pohon Biner Ekivalent

    Dua pohon yang memiliki struktur dan informasi yang

    sama

    P

    Q R

    P

    Q R

    P

    Q R

  • • Pohon Biner Miring (Skewed Tree)

    Dua pohon yang semua simpulnya mempunyai satu

    anak / turunan kecuali daun

    ISTILAH PADA POHON BINER

  • Dalam setiap simpul selalu berisi dua buah Pointer untuk

    menunjuk ke cabang Kiri dan cabang Kanan dan informasi

    yang akan disimpan dalam simpul tersebut.

    Deklarasi Pohon Biner

    (Dengan Program C++)

  • Penyajian Pohon Binar (Binary Tree)

    • Tree dapat dibuat dengan menggunakan linked list secara rekursif.

    • Linked list yang digunakan adalah double linked list non circular

    • Data yang pertama kali masuk akan menjadi node root.

    • Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root, sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan node root.

  • Bila diberikan untai HAKJCBL, maka proses untuk dapat

    membentuk pohon biner dari untai diatas adalah :

    1. Karakter pertama ‘H’ ditempatkan sebagai akar (root)

    2. Karakter ‘A’,karena lebih kecil dari ‘H’, maka akan

    menempati cabang kiri.

    3. Karakter ‘K’, karena lebih besar dari ‘H’, maka akan

    menempati cabang kanan.

    4. Karakter ‘J’, lebih besar dari ‘H’ dan kecil dari ‘K’, maka

    menempati cabang kiri ‘K’.

    5. Karakter ‘C’,karena lebih besar dari ‘A’, maka akan

    menempati cabang kanan.

    6. Karakter ‘B’, karena lebih kecil dari ‘C’, maka akan

    menempati cabang kiri.

    7. Karakter ‘L’, lebih besar dari ‘K’, maka menempati

    cabang kiri kanan.

  • Sehingga terbentuk pohon biner seperti

    berikut :

  • Latihan

    Buatlah pohon biner dari barisan bilangan

    berikut:

    1. 12, 22, 8, 19, 10, 9, 20, 4, 2, 6

    2. 2, 3, 4, 5, 50, 10, 15, 13, 20, 12, 10, 7

    3. 7, 13, 4, 6, 5, 9, 15, 20, 60, 14, 40, 70

    4. 50, 45, 55, 41, 49,13,60, 70, 40, 35, 30, 20, 80,

    75, 85

    5. 12, 19, 11, 17, 29, 21, 20, 22, 13, 14, 18, 16, 15

  • Latihan Soal Struktur Data

    (Pertemuan 9)

    1. Simpul Khusus pada pohon yang memiliki derajat keluar >= 0, dan derajat masuk = 0, adalah ….

    a. Node / simpul d. edge / ruas

    b. Root / akar e. level

    c. Leaf / daun

    2. Jika suatu pohon biner memiliki simpul sebanyak 5 maka banyaknya ruas adalah :

    a. 2 d. 5

    b. 3 e. 6

    c. 4

  • 2. Jika suatu pohon biner memiliki simpul sebanyak 5 maka banyaknya ruas adalah :

    a. 2 d. 5

    b. 3 e. 6

    c. 4

    3. Pohon biner yang memiliki ciri Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang sama, adalah pohon biner ….

    a. Lengkap / complete

    b. Similer

    c. Miring / skewed

    d. Penuh / full

    e. ekivalen

  • 3. Pohon biner yang memiliki ciri Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang sama, adalah pohon biner ….

    a. Lengkap / complete

    b. Similer

    c. Miring / skewed

    d. Penuh / full

    e. ekivalen

    4. Suatu pohon memiliki level = 4, maka banyaknya Simpul Maksimum yang dapat terbentuk sampai Level 4 adalah ….

    a. 8 b. 15 c. 12 d. 4 e. 7

  • 4. Suatu pohon memiliki level = 4, maka banyaknya Simpul Maksimum yang dapat terbentuk sampai Level 4 adalah ….

    a. 8 b. 15 c. 12 d. 4 e. 7

    5. Pohon biner yang memiliki struktur dan informasinya sama disebut :

    a. Miring (Skewed)

    c. Terstruktur

    b. Ekivalent

    d. Similer

    e. Complete

  • 5. Pohon biner yang memiliki struktur dan informasinya sama disebut :

    a. Miring (Skewed)

    c. Terstruktur

    b. Ekivalent

    d. Similer

    e. Complete

    1. Simpul Khusus pada pohon yang memiliki derajat keluar >= 0, dan derajat masuk = 0, adalah ….

    a. Node / simpul d. edge / ruas

    b. Root / akar e. level

    c. Leaf / daun

  • Pertemuan 10

    KUNJUNGAN

    PADA POHON BINER

  • Kunjungan Pohon Biner

  • 3. Kunjungan secara Postorder, mempunyai urutan :

    a. Kunjungi Cabang Kiri

    b. Kunjungi Cabang Kanan

    c. Cetak isi simpul yang dikunjungi (Simpul Akar)

    Kunjungan Pohon Biner

  • Pada ketiga cara kunjungan diatas, kunjungan ke

    Cabang Kiri dilakukan terlebih dahulu, baru kemudian

    kunjungan ke Cabang Kanan. Dengan orientasi

    semacam ini, Ketiga kunjungan diatas disebut dengan

    Left To Right Oriented (LRO).

    Jika kunjungan ke Cabang Kanan dilakukan lebih

    dahulu baru kemudian kunjungan ke Cabang Kiri, maka

    Orientasi semacam ini disebut Right To Left Oriented

    (RLO).

  • A

    B C

    D E

    A B D E C

    Klik Animasi

    PreOrder

  • Klik Animasi

    Contoh PreOrder

  • Kunjungan PreOrder dalam Program C++

  • A

    B C

    D E

    A B D E C

    Klik Animasi

    InOrder

  • Klik Animasi

    Contoh InOrder

  • Kunjungan InOrder dalam Program C++

  • A

    B C

    D E

    A B D E C

    3. Kunjungan secara Postorder, mempunyai urutan :

    a. Kunjungi Cabang Kiri

    b. Kunjungi Cabang Kanan

    c. Cetak isi simpul yang dikunjungi (Simpul Akar)

    Klik Animasi

  • Klik Animasi

    Contoh PostOrder

  • Kunjungan PostOrder dalam Program

    C++

  • Kunjungan LevelOrder

    Selain kunjungan yang dijelaskan diatas,

    masih ada satu macam kunjungan masih ada

    satu macam kunjungan lagi yaitu kunjungan

    LevelOrder.

    Kunjungan dimulai dari simpul yang ada pada

    tingkat 1 (Akar), diteruskan pada simpul di

    tingkat 2, tingkat 3 dan seterusnya.

  • Secara singkat kunjungan Level Order ini dapat dijelaskan

    sebagai berikut.

    1. Dimulai dengan memasukkan Akar kedalam antrean.

    2. Kemudian mengeluarkan Akar tersebut keluar dari

    antrean.

    Pada saat Akar tersebut dikeluarkan dari antrean, cabang

    kiri dan cabang kanan secara berturut-turut dimasukkan

    dalam antrean.

    Dengan kata lain jika suatu elemen dikeluarkan dari

    antrean, maka cabang kiri dan kanan dari elemen yang

    baru saja dikeluarkan dimasukkan kedalam antrean.

  • APLIKASI POHON BINER

    NOTASI PREFIX, INFIX DAN POSTFIX Pada bagian ini akan dibahas tentang bagaimana

    menyusun sebuah Pohon Binar yang apabila dikunjungi

    secara PreOrder akan menghasilkan Notasi Prefix,

    kunjungan secara InOrder menghasilkan Notasi Infix, dan

    kunjungan PostOrder menghasilkan Notasi Postfix.

  • Aplikasi Pohon Biner

  • Aplikasi Pohon Biner

  • Berdasarkan Gambar diatas, apabila dilakukan kunjungan

    secara PreOrder, maka akan diperoleh Notasi Prefix dari

    persamaan-persamaan yang digambarkan tersebut, yaitu :

    +A*BC (Gambar.a)

    *+AB-BC (Gambar.b)

    ^-*+ABC-DE+FG (Gambar.c)

    Jika dilakukan kunjungan secara InOrder, akan diperoleh

    Notasi Infixnya, yaitu :

    (A+(B*C)) (Gambar.a)

    ((A+B) * (B-C)) (Gambar.b)

    ((((A+B) * C) – (D-E))^(F+G)) (Gambar.c)

  • Jika dilakukan kunjungan secara PostOrder, akan

    diperoleh Notasi Postfixnya, yaitu :

    ABC*+ (Gambar.a)

    AB+BC-* (Gambar.b)

    AB+C*DE--FG+^ (Gambar.c)

  • Latihan Soal Struktur Data

    (Pertemuan 10)

    1. Kunjungan dengan urutan : kunjungi simpul akar, cabang kiri,cabang kanan, adalah kunjungan….

    a. Preorder d. Postorder

    b. Inorder e. Outorder

    c. Symetric Order

    2. Dengan kunjungan PREORDER maka untai yang dihasilkan adalah :

    a. A B D C

    b. A B C D

    c. B A D C

    d. B D C A

    e. B C D A

    A

    C B

    D

  • 2. Dengan kunjungan PREORDER maka untai yang dihasilkan adalah :

    a. A B D C

    b. A B C D

    c. B A D C

    d. B D C A

    e. B C D A

    3. Dari gambar disamping, notasi POSTFIX yang dihasilkan adalah …

    a. A B C - *

    b. A - B * C

    c. A B - C *

    d. * - A B C

    e. A B - * C

    A

    C B

    D

    *

    C -

    A B

  • 3. Dari gambar disamping, notasi POSTFIX yang dihasilkan adalah …

    a. A B C - *

    b. A - B * C

    c. A B - C *

    d. * - A B C

    e. A B - * C

    4. Dari gambar diatas,notasi PREFIX yang dihasilkan adalah :

    a. A B C - * d. A B - C *

    b. A - B * C e. * - A B C

    c. * - C A B

    *

    C -

    A B

  • 4. Dari gambar diatas,notasi PREFIX yang dihasilkan

    adalah :

    a. A B C - *

    b. A - B * C

    c. * - C A B

    d. A B - C *

    e. * - A B C

    5. Berikut ini, yang tidak termasuk dalam kunjungan

    pohon biner adalah :

    a. Inorder d. Preorder

    b. Outorder e. Postorder

    c. Symetric Order

    *

    C -

    A B

  • 5. Berikut ini, yang tidak termasuk dalam kunjungan

    pohon biner adalah :

    a. Inorder d. Preorder

    b. Outorder e. Postorder

    c. Symetric Order

    1. Kunjungan dengan urutan : kunjungi simpul akar, cabang kiri,cabang kanan, adalah kunjungan….

    a. Preorder d. Postorder

    b. Inorder e. Outorder

    c. Symetric Order

  • Pertemuan 11

    GRAPH,

    MATRIK PENYAJIAN GRAPH

  • Suatu Graph mengandung 2 himpunan, yaitu :

    1. Himpunan V yang elemennya disebut simpul (Vertex

    atau Point atau Node atau Titik)

    2. Himpunan E yang merupakan pasangan tak urut dari

    simpul. Anggotanya disebut Ruas (Edge atau rusuk

    atau sisi)

    Graph seperti dimaksud diatas, ditulis sebagai G(E,V).

    GRAPH

  • Contoh :

    Gambar berikut menanyakan Graph G(E,V) dengan :

    1. V mengandung 4 simpul, yaitu simpul A,B,C,D.

    2. E mengandung 5 ruas, yaitu :

    e1 = (A,B) e4 = (C,D)

    e2 = (B,C) e5 = (B,D)

    e3 = (A,D)

  • Gambar dibawah ini menyatakan suatu Multigraph.

    Disini, ruas e2 pada kedua titik ujungnya adalah simpul

    yang sama, yaitu simpul A. Ruas semacam ini disebut

    Gelung atau Self-Loop. Sedangkan ruas e5 dan e6 mempunyai titik ujung yang sama, yaitu simpul-simpul B

    dan C. Kedua ruas ini disebut ruas berganda atau ruas

    sejajar.

    e5

    e4

    e3 e2

    e1

    e6

  • Suatu Graph yang tidak mengandung ruas sejajar maupun

    self-loop, sering disebut juga sebagai Graph sederhana

    atau simple Graph.

    Suatu Graph G’(E’,V’) disebut Sub Graph dari G(E,V), bila E’

    himpunan bagian dari E dan V’ himpunan bagian dari V.

    Jika E’ mengandung semua ruas dari E yang titik ujungnya

    di V’, maka G’ disebut Subgraph yang direntang oleh V’

    (Spanning Subgraph).

  • Contoh Sub Graph:

  • Contoh Spanning Sub Graph

  • Graph G disebut berlabel jika ruas dan atau simpulnya

    dikaitkan dengan suatu besaran tertentu. Khususnya jika

    setiap Ruas e dari G dikaitkan dengan suatu bilangan

    non negatif d(e), maka d(e) disebut bobot atau panjang

    dari ruas e.

    GRAPH BERLABEL

  • Contoh :

    Gambar berikut ini menyajikan hubungan antar kota.

    Disini simpul menyatakan kota dan label d(e) menyatakan

    jarak antara dua kota.

  • DERAJAT GRAPH

    Derajat simpul V, ditulis d(v) adalah banyaknya ruas

    yang menghubungi v. Karena setiap ruas dihitung dua

    kali ketika menentukan derajat suatu Graph, maka :

    Jumlah derajat semua simpul suatu Graph (derajat) =

    dua kali banyaknya ruas Graph (Size) Atau dapat

    dituliskan :

    Derajat Graph = 2 x Size

  • Pada gambar diatas Jumlah Semua Simpul = 4, maka Jumlah Derajat Semua Simpul = 8

    Jika Derajat masing-masing simpul pada Graph berjumlah

    Genap maka Graph tersebut disebut EULER Graph

  • E D

    B

    C

    A F

    Contoh :

  • Pada gambar diatas, banyak ruas/size = 7, sedangkan

    derajat masing-masing simpul adalah :

    d(A) = 2

    d(B) = 5

    d(C) = 3

    d(D) = 3

    d(E) = 1

    d(F) = 0

    maka, total jumlah derajat s