70
Struktur Data Teknik Informatika 1 PENDAHULUAN Masalah yang harus diselesaikan komputer semakin kompleks. Pembuatan program menjadi lebih sederhana jika masalah dipecah menjadi submasalah-submasalah. Penyelesaian masalah dengan komputer menyangkut empat hal: Pemahaman secara menyeluruh keterhubungan elemen-elemen data yang relevan terhadap solusi masalah Pembuatan keputusan operasi-operasi yang dilakukan terhadap elemen-elemen data Perancangan metode representasi elemen-elemen data di memori sehingga memenuhi keterhubungan lojik antara elemen-elemen data dan operasi-operasi terhadap elemen-elemen data dapat dilakukan secara dan efisien. I. Struktur Data Tiap bahasa pemrograman mempunyai kumpulan tipe data built-in sehingga: Memungkinkan deklarasi variabel bertipe itu Menyediakan kumpulan operasi untuk memanipulasi variabel bertipe itu Objek Data Objek data mengacu kumpulan elemen, D (domain) Misal: objek data integer mengacu domain D={...,-3,-2,-1,0,1,2,3,...} Struktur Data Untuk membuat struktur data kita harus melakukan aktivitas terhadap objek data, yaitu: Mendeskripsikan kumpulan operasi sah yang diterapkan ke elemen-elemen objek Data dan menunjukkan mekanisme kerja operasi-operasi. Contoh: Struktur data: integer Konstanta: -2424,-56, 0, 3 1

Modul Struktur Data UNIKOM

Embed Size (px)

DESCRIPTION

modul

Citation preview

  • Struktur Data

    Teknik Informatika

    1

    PENDAHULUAN

    Masalah yang harus diselesaikan komputer semakin kompleks. Pembuatan program

    menjadi lebih sederhana jika masalah dipecah menjadi submasalah-submasalah. Penyelesaian

    masalah dengan komputer menyangkut empat hal:

    Pemahaman secara menyeluruh keterhubungan elemen-elemen data yang relevan terhadap solusi masalah

    Pembuatan keputusan operasi-operasi yang dilakukan terhadap elemen-elemen data Perancangan metode representasi elemen-elemen data di memori sehingga memenuhi

    keterhubungan lojik antara elemen-elemen data dan operasi-operasi terhadap elemen-elemen

    data dapat dilakukan secara dan efisien.

    I. Struktur Data Tiap bahasa pemrograman mempunyai kumpulan tipe data built-in sehingga:

    Memungkinkan deklarasi variabel bertipe itu Menyediakan kumpulan operasi untuk memanipulasi variabel bertipe itu

    Objek Data

    Objek data mengacu kumpulan elemen, D (domain)

    Misal: objek data integer mengacu domain

    D={...,-3,-2,-1,0,1,2,3,...}

    Struktur Data

    Untuk membuat struktur data kita harus melakukan aktivitas terhadap objek data, yaitu:

    Mendeskripsikan kumpulan operasi sah yang diterapkan ke elemen-elemen objek

    Data dan menunjukkan mekanisme kerja operasi-operasi.

    Contoh:

    Struktur data: integer

    Konstanta: -2424,-56, 0, 3

    1

  • Struktur Data

    Teknik Informatika

    2

    Fungsi/operasi: +,-,*,/, mod, dll

    Struktur data=objek data + {operasi manipulasi}

    Formal

    Struktur data berbeda dengan objek data karena struktur data mendeskripsikan:

    Kumpulan objek data Operasi-operasi dasar terhadap objek data Hubungan (relasi) antar objek data

    Struktur data dapat dinyatakan sebagai triple(D,F,A), disingkat d, yaitu

    1. Domain D, d D 2. Kumpulan fungsi F, yaitu kumpulan operasi terhadap anggota domain D

    3. Kumpulan aksiom A, yaitu kumpulan relasi atau invarian yang dipenuhi oleh anggota

    di domain D.

    Triple (D,F,A) juga disebut tipe data abstrak (abstract data type) karena implementasinya

    tersembunyi dari pemakai. Tidak hanya implementasi tipe data yang tersembunyi, tetapi juga

    implementasi operasi terhadap tipe data itu.

    Tipe data abstrak merupakan pemodelan matematik terhadap objek data dengan kumpulan

    operasi yang didefinisikan pada model itu. TDA merupakan generalisasi tipe data primitif.

    Tujuan pembuatan struktur data adalah sebagai information hiding atau encapsulation:

    Perubahan implementasi SD tidak mengubah teks program yang menggunakan SD jika SD dirancang secara bagus

    Pemakaian dan pembuatan SD dapat dilakukan secara terpisah, yang perlu ada kesepakatan mengenai antar muka pemakain SD

    SD merupakan sarana pemrograman modular dan menjadi landasan terbentuknya tim pemrograman.

  • Struktur Data

    Teknik Informatika

    3

    II. Pembuatan Struktur Data Tahap pembuatan SD:

    Spesifikasi : dapat secara formal atau informal Implementasi: cara penerapan struktur data dengan struktur data yang telah ada Pemrograman: penerjemahan menjadi pernyataan di bahasa pemrograman tertentu

    Praktis

    Pembuatan struktur data melibatkan pendefinisian komponen:

    Deklarasi SD dengan tipe data yang telah ada Operasi-operasi terhadap tipe data

    Pembuatan SD adalah pembentukan tipe data lengkap yang mempunyai empat properti:

    Nama Domain Penyebutan anggota-anggota Operasi-operasi terhadap tipe itu.

    Contoh: buatlah struktur data bernama BILBULAT dan operasi yang dapat diterapkan adalah:

    perkalian, pengurangan, dan penjumlahan. Untuk itu buatlah prosedur/fungsi KALI,KURANG,

    TAMBAH untuk mengimplementasikan operasi tersebut.

    Deklarasi:

    Type BILBULAT=integer;

    Procedure KALI(input BIL1,BIL2: bilbulat, output hasilkali: bilbulat)

    Deklarasi

    {tidak ada}

    Deskripsi

    Hasilkalibil1*bil2

  • Struktur Data

    Teknik Informatika

    4

    Procedure KURANG(input BIL1,BIL2: bilbulat, output hasilkurang: bilbulat)

    Deklarasi

    {tidak ada}

    Deskripsi

    Hasilkalibil1-bil2

    Procedure TAMBAH(input BIL1,BIL2: bilbulat, output hasiltambah: bilbulat)

    Deklarasi

    {tidak ada}

    Deskripsi

    Hasiltambahbil1+bil2 Latihan

    Untuk lebih memperjelas pengertian tipe data abstrak maka buatlah UNIT dalam bahasa Pascal

    untuk tipe bilangan bulat yang sudah dibuat di atas.

    III. Unit Unit adalah kumpulan prosedur dan fungsi yang siap untuk kita pakai dengan hanya

    mendeklarasikan nama unitnya di awal program. Dengan adanya unit ini maka kode program yang

    telah dibuat dalam unit dapat dipakai oleh program-program lain yang berbeda hanya dengan

    menyebutkan nama unit tersebut di awal program.

    Unit mempunyai struktur yang terdiri dari beberapa bagian, yaitu:

    - Unit header

    - Interface section

    - Implementation section

    - Initialization section

    Setelah semua bagian tersebut diisi, harus diakhiri dengan kata baku END.

    Contoh:

    unit BULAT;

    interface

    type

    BILBULAT=integer;

    procedure KALI(bil1,bil2:bilbulat;var hasilkali:bilbulat);

  • Struktur Data

    Teknik Informatika

    5

    Implementation

    procedure KALI(bil1,bil2:bilbulat;var hasilkali:bilbulat);

    begin

    hasilkali:=bil1*bil2;

    end;

    END.

    Saran:

    Sebaiknya nama file unit sama dengan nama unitnya. Misal jika unit namanya BULAT, simpan program pascal yang telah ditulis dengan nama BULAT juga.

    Lakukan kompilasi terhadap kode program anda yang telah anda simpan, otomatis unit akan terbentuk.

    Di bawah ini adalah contoh program yang menggunakan unit BULAT

    program coba;

    uses wincrt,bulat;

    var

    A,B,hasil: bilbulat;

    begin

    readln(A);

    readln(B);

    KALI(A,B,hasil);

    write(hasil);

    end.

  • Struktur Data

    Teknik Informatika

    6

    IV. Statement Kendali Statement kendali digunakan untuk memilih bagian program yang akan dikerjakan sesuai dengan

    kondisi yang diberikan. Statement kendali terdiri dari :

    1. Statement If

    Keterangan : untuk memeriksa benar salahnya suatu kondisi, kemudian akan

    dilakukan aksi sesuai nilai kondisinya

    Bentuk umum : if kondisi then aksi1 ;

    If bersarang : if kondisi1 then

    if kondisi2 then

    aksi1

    ;

    2. Statement Case

    Keterangan : digunakan dalam memilih satu aksi dalam sederetan

    kemungkinan aksi yang diberikan

    Bentuk umum : case var_pilih of

    konstanta1 : aksi1;

    konstanta2 : aksi2;

    konstanta3 : aksi3;

    ;

    end;

    V. Statement Perulangan Statement perulangan (repetitive statement) digunakan untuk melakukan proses berulang terhadap

    suatu aksi yang sederhana maupun majemuk selama memenuhi batas kondisi tertentu. Statement

    perulangan terdiri dari :

  • Struktur Data

    Teknik Informatika

    7

    1. Statement repeat .. untill

    Keterangan : statement ini memiliki kendali yang disimpan di akhir (setelah

    aksi yang akan diulang) sehingga dengan menggunakan

    statement ini aksi akan dilakukan minimal satu kali.

    Bentuk umum : repeat aksi until kondisi

    Contoh : X := 1;

    Repeat

    Writeln(Pascal):

    X := X+1;

    Until x>10;

    2. Statement while

    Keterangan : batasan kondisi untuk melakukan proses aksi disimpan di awal

    proses perulangan sehingga aksi mungkin saja tidak dilakukan

    sama sekali.

    Bentuk umum : while kondisi do aksi;

    Contoh : X :=1;

    While x

  • Struktur Data

    Teknik Informatika

    8

    VI. Array Array adalah sekelompok data yang bertipe sama yang disimpan ke dalam variabel dengan nama

    yang sama dan variabel ini berindeks. Array dapat memiliki lebih dari 1 indeks.

    Deklarasi : Var

    M : array [1..100] of integer;

    {variabel M terdiri dari 100 buah elemen yang dapat

    menampung data}

    N : array [1..100,1..100] of char;

    {variabel N memiliki 2 indeks, indeks pertama

    menunjukkan baris dan indeks kedua menunjukkan

    kolom}

    Contoh : X:=1;

    While X

  • Struktur Data

    Teknik Informatika

    9

    N! = N x (N-1)!

    Secara pemrograman perhitungan di atas bisa ditulis :

    Faktorial(0) = 1

    Faktorial(N) = N x Faktorial(N-1)

    Function faktorial(N : integer):integer;

    Begin

    If N=0 then

    faktorial :=1

    else

    faktorial := N * faktorial(N-1)

    End;

    Penjelasan program diatas dengan ilustrasi :

    Latihan

    1. Buatlah deklarasi untuk matriks dengan menggunakan array.

    2. Buatlah program penambahan dan pengurangan untuk matriks dengan menggunakan array.

    Faktorial

    Faktorial

    Faktorial

    Faktorial

    Faktorial

    4

    3

    2

    1

    24

    6

    2

    1

    10

  • Struktur Data

    Teknik Informatika

    10

    Kesimpulan

    Perancangan metode representasi elemen-elemen data yang menggunakan struktur data akan memenuhi kriteria: keterhubungan lojik antara elemen-elemen data dan operasi-operasi

    terhadap elemen-elemen data dapat dilakukan secara dan efisien.

    Dengan struktur data dapat dibuat tipe-tipe data abstrak yang dapat mempermudah dalam pemrograman, dan dengan didukung oleh statement perulangan, statement kendali dan rekursi.

  • Struktur Data

    Teknik Informatika

    11

    POINTER

    Pointer adalah suatu tipe data yang digunakan untuk mengalokasikan dan mendealokasikan

    tempat untuk variabel penyimpan data.

    Pointer disebut juga sebagai perubah dinamis, nilai yang dimilikinya bukan data melainkan nilai

    yang menunjuk ke lokasi lain (alamat) yang berisi data sesungguhnya yang akan diproses.

    Contoh perubah statis adalah array (larik), dimana lokasi-lokasi data sudah ditentukan dan tidak

    bisa diubah selama program dieksekusi. Kerugiannya menggunakan array adalah bahwa banyaknya

    data yang bisa diolah menjadi terbatas sesuai dengan kapasitas arraynya.

    I. Deklarasi Pointer

    Bentuk umum deklarasi pointer adalah :

    Type pengenal = ^simpul;

    Simpul = tipe;

    Contoh :

    Type teks = string(20);

    Poin= ^data;

    Data = record

    Nama : teks;

    Alamat : teks;

    Pekerjaan : teks;

    End;

    Var

    P1, P2 : Point;

    A, B, C : teks;

    2

  • Struktur Data

    Teknik Informatika

    12

    Pada saat dikompilasi P1 dan P2 akan menempati lokasi tertentu dan belum menunjuk ke suatu

    simpul tertentu, nilainya dinyatakan dengan nil.

    Untuk mengalokasikan simpul dalam pengingat, statement yang digunakan adalah new dengan

    bentuk umum :

    New(P1);

    Bila statement ini digunakan berulang kali maka nilai P1 yang lama akan terhapus, dengan

    demikian simpulnya tidak dapat ditunjuk oleh pointer manapun dan tidak terhubung kemanapun.

    Agar simpul aktif dan sifatnya menjadi dinamis maka kita harus mendeklarasikan sejumlah lokasi

    tertentu dengan menggunakan satu pointer saja.

    Ilustrasinya :

    Untuk membentuk simpul-simpul yang membentuk list di atas maka deklarasinya menjadi :

    Type perubah = ^simpul;

    simpul = record

    info : tipe;

    next : perubah;

    End;

    Contoh pendeklarasian data :

    Type teks = string(20);

    Poin= ^data;

    Data = record

    Nama : teks;

    Alamat : teks;

    Pekerjaan : teks;

    Next : point;

    End;

    Var

    P1

  • Struktur Data

    Teknik Informatika

    13

    P1, P2 : Point;

    Maka setelah statemen :

    New(P1);

    Akan terbentuk simpul seperti ini :

    II. Operasi Pointer

    Perhatikan deklarasi tipe pointer berikut :

    Type teks = string(20);

    Simpul= ^data;

    Data = record

    Nama : teks;

    Alamat : teks;

    Next : simpul;

    End;

    Var T1, T2 : Point;

    Sehingga kita mempunyai dua simpul yaitu :

    Jika kita isi :

    T1.nama := Micky;

    T1.alamat := Disneyland;

    Maka simpulnya menjadi :

    ? ?T1 ? ?T2

    Micky DisneylandT1

    ? ?T2

    ? ? ?P1 ? ? ?P2

  • Struktur Data

    Teknik Informatika

    14

    Operasi-operasi yang dapat dilakukan dengan pointer antara lain :

    1. Mengcopy pointer sehingga sebuah simpul dapat ditunjuk oleh pointer yang berbeda.

    Syaratnya kedua pointer memiliki deklarasi yang sama.

    Dari deklarasi di atas mengcopy pointer dilakukan dengan memberikan statemen :

    T2 := T1;

    Gambarnya menjadi :

    2. Mengcopy isi simpul sehingga dua pointer yang berbeda memiliki data simpul yang sama.

    Syaratnya kedua pointer memiliki deklarasi yang sama.

    Dari deklarasi di atas mengcopy isi simpul dilakukan dengan memberikan statemen :

    T2^ := T1^;

    Gambarnya menjadi :

    3. Menghapus pointer.

    Deklarasi untuk menghapus pointer adalah :

    Dispose(perubah);

    Contohnya :

    Dispose(T1);

    Latihan

    Buatlah dengan menggunakan deklarasi pointer untuk tipe data yang digunakan dalam sistem

    registrasi mahasiswa pada suatu semester.

    Micky DisneylandT1

    ? ?T2

    Micky DisneylandT1

    Micky DisneylandT2

  • Struktur Data

    Teknik Informatika

    15

    Kesimpulan

    - Dengan pointer memory tempat penyimpanan data dapat digunakan dengan efisien.

    - Pointer memiliki operasi copy pointer, copy simpul dan hapus pointer

  • Struktur Data

    Teknik Informatika

    16

    LINKED LIST

    Linked list merupakan salah satu struktur data yang dinamis, keuntungannya dibandingkan dengan

    larik (array) linked list adalah pada linked list dapat diketahui pasti kapan penambahan atau

    penghapusan data berakhir.

    Linked list adalah kumpulan komponen yang disusun berurutan dengan bantuan pointer, masing-

    masing komponen disebut simpul (node), tiap node terdiri dari bagian informasi (data) dan bagian

    linked sebagai alamat ke node selanjutnya.

    Elemen terakhir dari sebuah linked list dikenali dengan last^.next = nil.

    Ilustrasi

    info Next

    Istilah

    First : Pointer penunjuk lokasi simpul pertama linked list

    Nill / Null : Tidak bernilai

    Linked list

    kosong

    : Linked list dengan first = nil

    Next : Alamat yang penunjuk ke simpul selanjutnya

    I. Single Linked List Single linked list adalah linked list dengan simpul yang memiliki satu link/pointer yang mengacu ke

    simpul berikutnya.

    Ilustrasi

    Simpul :

    Info /

    3

  • Struktur Data

    Teknik Informatika

    17

    First :

    Linked list kosong :

    First

    List dengan 4 elemen :

    Contoh lain :

    Nama Link

    MI 1 Kiki 8

    9 2 Toni 6

    3 Agam 1

    4 Via 0

    LB 5

    3 6 Mira 4

    7 Helmi 0

    8 Iyan 7

    9 Shila 2

    Disajikan dalam single linked list :

    First

    info

    A DCB

    First

    Shila 2 ViaMira 4Toni 6

    9MI

  • Struktur Data

    Teknik Informatika

    18

    Deklarasi linked list :

    Type node = ^data

    data = record

    info : char; {tipe data info}

    next : node;

    end;

    var element : char; {tipe data element}

    awal, akhir, baru : node;

    linkedlist = record

    first : node

    end;

    II. Operasi Pada Single Linked List Operasi-operasi yang dapat dilakukan pada single linked list antara lain :

    1. Pembuatan dan penghapusan node

    2. Inisialisasi dan fungsi cek list kosong

    3. Penyisipan simpul ke list

    - Sebagai simpul pertama

    - Setelah simpul tertentu

    - Sebagai simpul terakhir

    - Sebelum simpul tertentu

    4. Penghapusan simpul dalam list

    - Di simpul pertama

    - Menghapus setelah simpul tertentu

    - Di akhir simpul

    5. Penelusuran list

    6. Pencarian simpul

    Berikut ini skema dan procedure masing-masing operasi :

    Agam 1 HelmiIyan 7Kiki 8

    3LB

  • Struktur Data

    Teknik Informatika

    19

    1. Pembuatan dan penghapusan node

    Function createlist(x:data_type):node;

    Var p:node;

    Begin

    New(P);

    P^.data := x;

    P^.next := nil;

    End;

    Procedure destroylist(var p:node);

    Begin

    Dispose(P);

    End;

    2. Inisialisasi dan fungsi memeriksa list kosong

    Procedure initL(var L:linkedlist)

    Begin

    L^.first:=nil;

    End;

    Function isEmpty(L : linkedlist):boolean;

    Begin

    IsEmpty:=(L.first=nil);

    End;

  • Struktur Data

    Teknik Informatika

    20

    3. Penyisipan simpul ke list - Sebagai simpul pertama

    Skema :

    Procedure InsertFirst(var L:linkedlist;p:node);

    Begin

    P^.next := L.first;

    L.first := P;

    End;

    B C

    First

    D

    A

    B C

    First

    D

    A

    B C

    First

    DA

    P

    P

    P

  • Struktur Data

    Teknik Informatika

    21

    - Setelah simpul tertentu

    Skema :

    Procedure InsertAfter(var prec:node;r:node);

    Begin

    r^.next := prec^.next;

    prec^.next := r;

    End;

    B C

    First

    D

    A

    B C

    First

    D

    A

    C A

    First

    DB

    r

    r

  • Struktur Data

    Teknik Informatika

    22

    - Sebagai simpul terakhir

    Skema :

    Procedure InsertLast(var L:linkedlist;p:node);

    Var Last : node;

    Begin

    If (L.first=nil) then

    InsertFirst(L,P)

    Else

    Begin

    Last := L.first;

    While (Last^.nextnil) do

    Last:=last^.next;

    InsertAfter(Last,P);

    End;

    End;

    B C

    First

    D

    A

    B C

    First

    D

    A

    C D

    First

    AB

    P

    P

  • Struktur Data

    Teknik Informatika

    23

    - Sebelum simpul tertentu

    Skema :

    Procedure InsertBefore(var L:linkedlist;x:data_type);

    Var p,precP : node;

    Found : boolean;

    Begin

    Found := false;

    PrecP :=nil;

    P :=L.first;

    While(pnil) and (not found) do

    If p^.key = k then

    Found :=true

    Else

    Begin

    PrecP := p;

    P := p^.next;

    End;

    End;

    B C

    First

    D

    A

    B C

    First

    D

    A

    A C

    First

    DB

    PprecP

  • Struktur Data

    Teknik Informatika

    24

    4. Penghapusan simpul dalam list - Di simpul pertama

    Skema :

    Procedure deleteFirst(var L:linkedlist);

    Var p: node;

    Begin

    If (L.first nil) then

    Begin

    P:=L.first; L.first := L.first^.next;

    Dispose(p);

    End;

    End;

    B C

    First

    D

    B C

    First

    D

    C D

    First

    P

  • Struktur Data

    Teknik Informatika

    25

    - Hapus Setelah Simpul Tertentu

    Skema :

    Procedure deleteAfter(var prec:node);

    Var p: node;

    Begin

    If (prec^.next nil) then

    Begin

    P:= prec^.next;

    prec^.next:= prec^.next^.next;

    Dispose(p);

    End;

    End;

    B C

    First

    DA

    P

    B

    C

    First

    DA

    P

    B

    First

    DA

  • Struktur Data

    Teknik Informatika

    26

    - Di akhir simpul

    Skema :

    Procedure deleteLast(var L:linkedlist);

    Var Last, precLast: node;

    Begin

    If (L.first nil) then

    Begin

    Last :=L.first;

    PrecLast :=nil;

    While (Last^.nextnil) do

    Begin

    PrecLast :=Last;

    Last :=Last^.next;

    End;

    P:=last;

    If (precLast=nil) then L.first=nil

    Else precLast^.next :=nil;

    Dispose(p);

    End; End;

    B C

    First

    D

    B C

    First

    D

    B C

    First

    P

  • Struktur Data

    Teknik Informatika

    27

    5. Penelusuran list Procedure ListTraversal(L:linkedlist);

    Var p:node;

    Begin

    Init;P:=L.first;

    While (Pnil) do

    Begin

    Visit(P);

    P := P^.next

    End;

    Terminate;

    End;

    6. Pencarian Simpul Function ListSearch(element:char; awal:node):boolean;

    Var Found :boolean;

    Begin

    Found:=false;

    Repeat

    If awal^.info = element then

    Found := true

    Else

    Awal := Awal^.next

    Until Found or (Awal=nil)

    ListSearch:=Found;

    End;

    Latihan

    1. Buat skema dan procedure dalam bahasa pascal/turbo C untuk penghapusan simpul tertentu.

    2. Buat program untuk mencatat pemesanan kereta api, yang didalamnya memuat info nama,

    alamat, tujuan , no kereta dan jam keberangkatan. Dan outputnya berupa cetakan daftar tiket

    yang dipesan.

  • Struktur Data

    Teknik Informatika

    28

    3. Buat program untuk melakukan operasi pengurangan dan penambahan pada polinom. Misalkan

    :

    Input :

    Polinom ke-1 : x + 9

    Polinom ke-2 : x2 + 1

    Output: Penambahan : x2 + x + 1 Pengurangan : -x2 + x + 8

    4. Deklarasikan variabel-variabel untuk list berikut :

    a. List bernama L

    b. List bernama LList

    5. Buat representasi dalam list serta deklarasi tipenya.

    Address nim nama Next

    1 0001 A 3

    2 0002 B 8

    3 0003 C 0

    4 0004 D 1

    5 0005 E 0

    6 0006 F 5

    7 0007 G 6

    8 0008 H 4

    6. Buatlah fungsi untuk memeriksa apakah suatu data info terdapat dalam list atau tidak.

    Sasha

    First

    BudiAmir

    Sisi

    First

    Budi1 3

    2

    7

    MI

    LB

  • Struktur Data

    Teknik Informatika

    29

    III. Varian Linked List

    Selain single linked list, jenis varian linked list yang harus dikenal yaitu :

    1. Singly Linked List

    - Singly Linked List dasar (sudah dipelajari sebelumnya)

    - Headed Linked List

    - Singly Linked List dengan Last

    2. Circular Linked List

    3. Doubly Linked List

    III.1 Singly Linked List

    III.1.1 Headed Linked List

    Ada kalanya kita membutuhkan sebuah simpul sebagai simpul pertama dari linked list

    untuk maksud-maksud tertentu. Simpul ini tidak berisi informasi tapi keberadaannya sangat

    diperlukan untuk mempercepat proses eksekusi.

    Skema

    Procedure Awalan(var head:node);

    Begin

    New(Head);

    Head^.next := nil;

    End;

    III.1.2 Singly Linked List dengan Last

    1. Deklarasi

    Type

    Tipe_data : .;

    Node = ^data

    Data = record

    Info : tipe_data;

    A B C

    Head

  • Struktur Data

    Teknik Informatika

    30

    Next : node;

    End;

    List = record

    First : node;

    Last : node;

    End;

    2. Inisialisasi

    Procedure InitL(var L:list);

    Begin

    L.first := nil;L.last:= nil;

    End;

    3. Penyisipan sebagai simpul pertama

    Procedure InsertFirst(var L:List; P:node)

    Begin

    If L.first = nil then

    L.last:=P;

    P:=L.First;

    L.First:=P;

    End;

    4. Penyisipan sebagai simpul terakhir

    Procedure InsertLast(var L:List; P:node)

    Begin

    If L.first = nil then

    InserFirst(L,P);

    Else

    Begin

    L.last^.next := P;

    L.last := P;

    End;

  • Struktur Data

    Teknik Informatika

    31

    End;

    5. Penghapusan simpul pertama

    Procedure DeleteFirst(var L:List)

    Var P : node;

    Begin

    If L.first nil then

    Begin

    P:=L.First;

    L.First:= L.First^.next;

    If L.First = nil then

    L.Last := nil;

    Dispose(P)

    End;

    End;

    6. Penghapusan simpul terakhir

    Procedure DeleteLast(var L:List)

    Var P, PrecLast : node;

    Begin

    If (L.Firstnil) then

    Begin

    P := L.Last;

    PrecLast := L.first ;

    While (PrecLast^.next Last) do

    PrecLast := PrecLast^.next;

    If PrecLast^.next = L.first then

    Begin

    L.First := nil;

    L.Last := nil;

    End;

  • Struktur Data

    Teknik Informatika

    32

    Else

    Begin

    PrecLast^.next := nil;

    L.Last := PrecLast;

    End;

    Dispose(P)

    End;

    End;

    7. Penghapusan simpul setelah simpul tertentu

    Procedure DeleteAfter(var prec:node);

    Begin

    If (Prec^.next nil) then

    Begin

    P := Prec^.next;

    If Prec^.next L.Last then

    Prec^.next := Prec^.next^.next;

    Else

    L.Last := prec;

    Dispose(P);

    End;

    End;

    IV. Circular Linked List Perbedaan antara single linked list dengan circular linked list adalah simpul terakhir pada

    circular yang tidak bernilai nil tetapi mengacu ke simpul pertama dalam list sehingga

    membentuk lingkaran.

    Deklarasi untuk circular linked list :

    Type

    Tipe_data = ;

    Node = ^data;

    Data = record

    Info : tipe_data;

  • Struktur Data

    Teknik Informatika

    33

    Next : node;

    End;

    CList = record

    First : node;

    Head : node; {optional : bila circular menggunakan head}

    Last : node; {optional : bila circular menggunakan last}

    End;

    Skema untuk penambahan simpul di akhir pada circular linked list dengan head :

    Procedure add_last(head:node;elemen:char);

    Var baru,bantu : node;

    Begin

    New(Baru);

    Baru^.info := Elemen;

    If Head^.next = Head then {list masih kosong}

    Begin

    Baru^.next := Head;

    A B C

    Head

    A B C

    Head

    A B C

    Head

    Baru

    BaruBantu

    Baru

  • Struktur Data

    Teknik Informatika

    34

    Head^.next := Baru

    Bantu := Baru;

    End;

    Else {list tidak kosong}

    Begin

    Bantu := Head^.next;

    While bantu^.next Head do

    Bantu := Bantu^.next;

    Baru^.next := Kepala;

    Bantu^.next := Baru;

    End;

    End;

    V. Doubly Linked List Deklarasi untuk doubly linked list :

    Type

    Tipe_data = ;

    Node = ^data;

    Data = record

    Info : tipe_data;

    Kanan : node;

    Kiri : node;

    End;

    DList = record

    First : node;

    Head : node; {optional : bila list menggunakan head}

    Last : node; {optional : bila list menggunakan last}

    End;

  • Struktur Data

    Teknik Informatika

    35

    Prosedur untuk penambahan simpul baru pada doubly linked list dengan posisi setelah head

    digambarkan sebagai berikut :

    - Kondisi awal : Masukan head ke dalam variabel :

    Bantu := Head;

    Langkah 1 : Baru^.kanan := Bantu^.kanan;

    Langkah 2 : Baru^.kiri := Bantu;

    Head

    A B

    G

    Baru

    Head

    A B

    G

    Baru

    Head

    A B

    GBaru

  • Struktur Data

    Teknik Informatika

    36

    Langkah 3 : Bantu^.kanan^.kiri := Baru;

    Langkah 4 : Bantu^.Kanan := Baru;

    Kondisi akhir

    Secara lengkap prosedur penambahan simpul baru pada doubly linked list setelah head :

    Procedure AddNode(var head:node; elemen:char);

    Var baru,bantu : node;

    Begin

    New(Baru);

    Baru^.Info := Elemen;

    Baru^.kiri := nil;

    Baru^.kanan := nil;

    Head

    A B

    GBaru

    Head

    A B

    GBaru

    Head

    BAG

  • Struktur Data

    Teknik Informatika

    37

    Bantu := head;

    while Bantu^.kanan^.info < elemen do

    Bantu := Bantu^.kanan;

    If Bantu^.kanannil then

    Begin

    Baru^.kanan := Bantu^.kanan;

    Bantu^.kanan^.kiri := Baru;

    End;

    Bantu^.kanan := Baru;

    Baru^.kiri := Bantu;

    End;

    Kesimpulan

    Linked list terdiri dari beberapa jenis yaitu :

    1. Single linked list, sngle linked list ber head dan ber tail atau kombinasi dengan last

    2. Circular linked list

    3. Doubly linked list

    Setiap tipe list memiliki operasi penyisipan (diawal, akhir, sebelum atau sesudah simpul tertentu),

    operasi penghapusan (diawal, akhir, sebelum atau sesudah simpul tertentu) dan operasi pencarian.

    Optional : Digunakan untuk penyisipan pada doubly list yang

  • Struktur Data

    Teknik Informatika

    38

    STACK

    Bentuk struktur data selain list dalam ilmu komputer adalah tumpukan (stack). Tumpukan dapat

    diartikan sebagai suatu kumpulan data yang seolah-olah ada data yang diletakan di atas data yang

    lain dan kita dapat menambahkan (menyisipkan) dan mengambil (menghapus) data seperti operasi

    pada bentuk struktur data yang lain, bedanya pada stack semuanya dilakukan melalui ujung atas

    tumpukan yang selanjutnya akan kita sebut TOP.

    Stack dapat diilustrasikan sebagai berikut :

    I. Penyajian Stack Ada beberapa cara untuk menyajikan sebuah stack dalam pemrograman yaitu dengan :

    1. Array Stack adalah sekumpulan data, maka dengan adanya tipe data terstruktur yang disebut

    array, bisa kita gunakan untuk menyajikan stack. Tapi akan kita temukan bahwa

    penggunaan array untuk stack kurang tepat, karena banyaknya elemen dalam array sudah

    tertentu (statis) sedangnya jumlah elemen dalam stack bisa sangat bervariasi.

    Dengan demikian akan kita gunakan array untuk penyajian satck dengan asumsi bahwa

    jumlah elemen stack lebih kecil dari batas maksimum array. Jika pada saat ukuran array

    dan stack sudah sama dan kita masih menambah data maka akan terjadi overflow,

    sehingga dibutuhkan suatu variabel pencatat posisi ujung tumpukan.

    Deklarasi stack dengan menggunakan array :

    Const Max = 255;

    FEDCBA

    Atas

    A B C D E F

    Atas

    ABCDEF Atas

    4

  • Struktur Data

    Teknik Informatika

    39

    Type tumpukan = record

    Isi : array [1..max] of integer;

    Atas : 0..max;

    End;

    Var T : tumpukan;

    Operasi pada stack :

    - Operasi Push

    Operasi push adalah operasi menumpuk/menyisipkan data, implementasinya :

    Procedure Push(var T:tumpukan; x:integer);

    {procedure dengan memeriksa apakah array sudah penuh atau belum}

    Begin

    If T.atas = max then

    Writeln(Stack sudah penuh);

    Else

    Begin

    T.atas : =T.atas + 1;

    T.isi[T.atas]:=x;

    End;

    End;

    Procedure Push(var T:tumpukan;var penuh:boolean; x:integer);

    {procedure dengan menghasilkan pesan bertipe boolean}

    Begin

    If T.atas = max then

    Penuh := true;

    Else

    Begin

    Penuh := false;

    T.atas : =inc(T.atas);

    T.isi[T.atas]:=x;

    End;

    End;

  • Struktur Data

    Teknik Informatika

    40

    - Operasi Pop

    Operasi pop adalah operasi untuk menghapus elemen yang terletak pada posisi

    paling atas dari sebuah stack. Implementasinya :

    Procedure pop(var T:tumpukan);

    Begin

    If T.atas = 0 then

    Writeln(Stack sudah kosong);

    Else T.atas := T.atas 1;

    End;

    2. List Stack dapat disajikan dalam bentuk senarai berantai (linked list). Elemen pertama dalam

    linked list diperlakukan sebagai elemen teratas dari stack (top). Berikut ini deklarasi tipe

    data dan procedure untuk operasi stack dengan menggunakan singe linked list berkepala.

    Type Stc = ^.data

    Type data = record

    Info : char;

    Next : stc;

    End;

    Var atas : stc;

    Karena kita menggunakan linked list berkepala maka terlebih dahulu dilakukan

    inisialisasi tumpukan untuk menentukan simpul kepala. Jika linked list hanya berisi

    simpul kepala maka artinya tumpukan masih kosong.

    Procedure inisialisasi_stack(var t:stc);

    Begin

    New(atas);

    Atas^.next := nil;

    End;

  • Struktur Data

    Teknik Informatika

    41

    Procedure push(atas:tumpukan; elm:char);

    {procedure untuk mempush elemen ke dalam stack}

    var baru : stc;

    begin

    new(baru);

    baru^.info:=elm;

    baru^.next:=nil;

    if atas^.next nil then {artinya stack sudah berisi}

    begin

    baru^.next := atas^.next;

    atas^.next := baru;

    end;

    else

    atas^.next := baru;

    end;

    Procedure Pop(atas:stc; var kosong:boolean;elm:char);

    {procedure untuk mengambil elemen teratas pada stack}

    Var bantu:stc;

    Begin

    Kosong := false;

    If atas^.next = nil then {stack kosong}

    Kosong := true;

    Else

    Begin

    Bantu := Atas^.next;

    Elm := Bantu^.info;

    Atas^.next := Bantu^.next;

    Dispose(Bantu);

    End;

    End;

  • Struktur Data

    Teknik Informatika

    42

    II. Contoh Pemakaian Stack Untuk lebih memahami operasi yang terjadi pada tumpukan, berikut diberikan contoh kasus.

    1. Kasus konversi infiks ke postfiks tanpa tanda kurung

    Jenis-jenis operator :

    - Operator aritmatika dasar : +, -, *, /, ^, minus, plus, mod, ceil dan floor

    - Operator relasi : , =, =,

    Aturan penggunaan ekspresi menggunakan well form formula (WLL) :

    - Setiap variable tunggal / satu bilangan bulat tak negatif adalah ekspresi infiks

    valid.

    - Jika A dan B adalah ekspresi infiks valid maka (A+B), (A+-), (A*B) DAN

    (A/B) adalah ekspresi infiks valid.

    - Hanya ekspresi-ekspresi yang didefinisikan pada dua poin di atas yang

    merupakan ekspresi infiks valid.

    Mekanisme konversi infiks tanpa tanda kurung menjadi postfiks :

    - Satu stack diinisialisasi kosong

    - String infiks ekspresi infiks tak bertanda kurung valid - String postfiks diinisialisasi dengan (null string) untuk menampung hasil

    konversi

    - Tabel tingkat kekuatan symbol

    Tkt Kekuatan Nama Simbol

    5 Variable, konstanta A,B, .. ,Z, 0 .. 9

    4 Sign +, -

    3 Pangkat ^

    2 Kali, bagi *, /

    1 Tambah, kurang +, -

  • Struktur Data

    Teknik Informatika

    43

    Langkah-langkah konversi :

    - Baca symbol ekspresi dari kiri ke kanan (scan)

    - Lakukan pop dari stack jika tingkat kekuatan >= tingkat kekuatan symbol yang

    sedang discan, jika tidak lakukan push

    - Simbol yang di pop disambung ke string postfiks

    - Jika ditemui akhir string infiks, lakukan pop dari stack dan sambungkan ke string

    postfix

    Latihan

    1. Buatlah program dengan inputan sebuah kata, untuk memeriksa apakah kata tersebut palindrom

    (kata yang bersifat palindrom adalah kata yang dibaca dari kanan atau kiri, pembacaannya sama,

    contohnya: ada, malam, katak). Gunakan operasi stak baik dengan array maupun dengan

    menggunakan list.

    2. Buatlah program dengan menggunakan stack untuk menghasilkan konversi angka yang berbasis 10

    ke basis 2.

    Kesimpulan

    Stack adalah salah satu bentuk struktur data dengan sifat Last In First Out, penyajiannya dapat

    menggunakan array maupun list dan operasi yang dimiliki yaitu POP untuk menghapus elemen dan

    PUSH untuk menyimpan elemen di stack.

  • Struktur Data

    Teknik Informatika

    44

    QUEUE

    Prinsip yg digunakan antrian adalah FIFO, untuk penambahan elemen hanya bisa dilakukan

    pada suatu ujung belakang (rear/tail) dan untuk penghapusan dilakukan lewat ujung depan

    (front/head). Sehingga urutan keluar elemen akan sama dengan urutan masuknya. Contoh: antrian

    mobil di pintu jalan tol ketika membeli tiket.

    I. Karakteristik Queue

    Karakteristik penting Queue adalah:

    1. Elemen antrian, yaitu item/item data yg terdapat di elemen antrian

    2. Elemen terdepan dari antrian (front)

    3. Elemen terakhir dari antrian (Tail)

    4. Jumlah elemen pada antrian (count)

    5. Status antrian

    Kondisi Queue yang menjadi perhatian adalah:

    Penuh, bila elemen pada antrian mencapai kapasitas maksimum antrian. Pada kondisi ini, tidak mungkin dilakukan penambahan ke antian, karena akan menyebabkan kondisi

    kesalahan yg disebut dengan overflow.

    Kosong, bila tidak ada elemen pada antrian. Pada kondisi ini, tidak mungkin dilakukan pengambilan elemen dari antrian, karena akan menyebabkan kondisi kesalahan yang

    disebut dengan underflow.

    5

  • Struktur Data

    Teknik Informatika

    45

    II. Implementasi Queue Contoh Array linear: Nilai Awal Head dan Tail adalah 0 (nol)

    1 2 3 4 5 6

    Head = 0

    Tail = 0

    1 2 3 4 5 6

    Head = 1

    Tail = 4

    1 2 3 4 5 6

    Head = 3

    Tail = 4

    1 2 3 4 5 6

    Head = 3

    Tail = 6

    Keterangan:

    - Nilai awal untuk head dan tail adalah nol

    - Antrian kosong jika tail

  • Struktur Data

    Teknik Informatika

    46

    Deklarasi antrian menggunakan array :

    Const max = 100;

    Type antri = array [1max] of integer;

    Var

    Antrian : antri;

    Depan, belakang : integer;

    Dalam deklarasi ini elemen antrian dinyatakan dalam tipe integer, depan adalah peubah yang

    menunjukkan posisi elemen pertama dan belakang adalah peubah yang menunjukkan posisi elemen

    terakhir dalam array.

    Prosedur untuk menambah elemen baru pada sebuah antrian :

    Procedure tambah (var q:antri; x:integer);

    Begin

    If belakang := max then belakang:=1

    Else belakang := belakang +1;

    If depan = belakang then

    Writeln(antrian sudah penuh)

    Else q[belakang] := x;

    End;

    Fungsi untuk mengecek keadaan antrian :

    Function kosong(q:antri):boolean;

    Begin

    Kosong:=(depan=belakang);

    End;

    Fungsi untuk menghapus elemen :

    Function hapus(var q:antri):char;

    Begin

    If kosong (q) then

    Writeln(Antrian kosong );

    Else

  • Struktur Data

    Teknik Informatika

    47

    Begin

    Hapus := q[depan];

    If depan = max then

    Depan:=1;

    Else

    Depan:=depan+1;

    End;

    End;

    Impelementasi antrian dengan pointer dapat menggunakan circular single linked list dengan head

    (senarai berantai tunggal berkepala dan memutar), dengan deklarasi :

    Type antri = ^simpul;

    Simpul = record

    Info : char;

    Next : antri;

    End;

    Var head,tail : antri;

    Prosedur inisialisasi antrian :

    Procedure init(var head,tail:antri);

    Begin

    New(head);

    Head^.info := chr(0);

    Head^.next := head;

    Tail := head;

    End;

    Procedur menambah elemen baru menggunakan pointer :

    Procedure tambah_elemen(var ekor:antri;elmnt:char);

    Var baru : antri;

    Begin

    New(baru);

  • Struktur Data

    Teknik Informatika

    48

    Baru^.info := elmnt;

    Baru^.next := head;

    Tail := baru;

    End;

    Fungsi untuk mengecek keadaan antrian menggunakan pointer:

    Function antriankosong(head:antri):boolean;

    Begin

    antriankosong:=(head^.next=head);

    End;

    Prosedur untuk menghapus elemen antrian menggunakan pointer :

    Procedure hapusantrian(var head:antri);

    Var hapus:antri;

    Begin

    If not(antriankosong(head)) then

    Begin

    Hapus:=head^next;

    Head^.next:=hapus^.next;

    Dispose(hapus);

    End

    Else

    Writeln(Antrian dalam keadaan kosong ..);

    End;

    Latihan

    - Buatlah semua function dan procedure queue ke dalam bahasa pemrograman C.

    - Buatlah simulasi tempat parkir dengan menggunakan queue

  • Struktur Data

    Teknik Informatika

    49

    Kesimpulan

    - Queue adalah salah satu bentuk struktur data yang merupakan sekumpulan data yang memiliki

    aturan first in first out, dengan kata lain urutan elemen yang keluar sama dengan urutan elemen

    yang masuk.

    - Queue dapat diimplementasikan dengan menggunakan array maupun list.

  • Struktur Data

    Teknik Informatika

    50

    TREE

    Struktur Tree digunakan untuk menggambarkan hubungan yg bersifat hirarkis antara

    elemen-elemen yg ada. Secara sederhana Tree bisa didefinisikan sebagai kumpulan elemen yang

    salah satu elemennya disebut dengan root, node, subtree.

    Contoh pembentukkan Tree:

    Node tunggal bernama N sebagai informasi :

    Subtree bernama N1,N2,..Nk

    Terdiri dari node N1,N2,Nk

    Tree yg terbentuk dari Node N sebagai root :

    N

    NKN2N1 ........

    N

    NKN2N1 ........

    6

  • Struktur Data

    Teknik Informatika

    51

    Contoh Tree:

    Keterangan :

    - Jumlah level 4

    - Degree:

    - A mempunyai Degree 2

    - C mempunyai Degree 3 dst

    - Leaf/External Node : Node F,H,I,J,K,L,N,O dgn Degree 0

    - Height/dept : A mempunyai tinggi atau kedalaman 4

    - Ancestor dari simpul L adalah A,C,G

    A

    ON

    KJI L M

    HF GED

    CB

  • Struktur Data

    Teknik Informatika

    52

    Gambar Diagram Venn dari tree tsb, sbb:

    Notasi kurung dari tree tersebut adalah sebagai berikut :

    (A (B (D( I ),E (J,K), C(F,G(L,M(N,O)H)))

    Notasi garis dari tree tersebut adalah sebagai berikut :

    A B D I E J K C F G L M N O H Hilangkan garis pada gambar diatas, untuk notasi tingkat

    C

    A B

    D

    F

    H

    G

    L N

    O

    M

    I J

    K

  • Struktur Data

    Teknik Informatika

    53

    I. Pohon Biner Karakteristik:

    Setiap simpul paling banyak hanya mempunyai dua buah anak (degree tertinggi setiap simpul adalah dua)

    Dibedakan antara cabang kiri dan cabang kanan (maka termasuk tree beraturan) Dimungkinkan tidak mempunyai simpul

    Pohon biner dapat didefinisikan sebagai suatu kumpulan simpul yang mungkin kosong atau

    mempunyai akar dan dua subpohon yang saling terpisah yang disebut dengan subpohon kiri (left

    subtree) dan subpohon kanan (right subtree). Subpohon juga disebut dengan istilah cabang.

    Pohon biner merupakan tipe yang sangat penting dari struktur pohon, dan banyak dijumpai dalam

    berbagai terapan. Sesuai dengan definisi di atas, maka ada karakteristik yang dimiliki oleh pohon

    biner, yaitu bahwa setiap simpul paling banyak hanya mempunyai dua buah anak. Dengan kata lain,

    derajat tertinggi dari setiap simpul dalam pohon biner adalah dua.

    Dalam pohon biner, urutan antara cabang kiri dengan cabang kanan sangat diperhatikan, sehingga

    kedua pohon dapat dikatakan sama apabila kedua pohon identik satu sama lain baik struktur pohon,

    maupun isi simpul dan daun pohon.

    Banyaknya simpul maksimal pada pohon biner lengkap tingkatan ke N adalah :

    Sebagai contoh misalnya pohon biner lengkap tingkat ke-4 mempunyai daun sebanyak 8 (23) dan

    mempunyai simpul yang bukan daun (termasuk akar) sebanyak 7 (23-1).

    Berikut ini akan diberikan algoritma program yang digunakan untuk membuat pohon biner dengan

    ketentuan bahwa informasi yang tersimpan pada cabang kiri selalu lebih kecil dari simpul akar dan

    informasi yang tersimpan dalam simpul akar selalu lebih kecil dari pada simpul cabang kanan

    (cabang kanan < akar < cabang kiri).

    II. Kunjungan Pada Pohon Biner Terdiri dari :

    1. Preorder :

    cetak isi simpul yg dikunjungi kunjungi cabang kiri kunjungi cabang kanan

  • Struktur Data

    Teknik Informatika

    54

    2. Inorder:

    Kunjungi cabang kiri Cetak isi simpul yg dikunjungi Kunjungi cabang kanan

    3. Postorder:

    Kunjungi cabang kiri Kunjungi cabang kanan Cetak isi simpul yg dikunjungi

    4. Levelorder:

    Kunjungi akar (tingkat 1) Cetak simpul yg dikunjungi Kunjungi tingkat 2 dst

    Contoh:

    Preorder: HACDBKJL

    Inorder: ABCDHJKL

    Postorder:BDCAJLKH

    Levelorder: HAKCJLBD

    H

    DB

    LJC

    KA

  • Struktur Data

    Teknik Informatika

    55

    Latihan

    Ujilah program pohon berikut ini dan buatlah algoritmanya.

    program Pohon_Biner_dgn_senarai_berantai;

    uses SysUtils;

    const MaksChr = 30; { Jumlah karakter maksimum dalam string }

    type pohon = ^simpul;

    simpul = record

    Kiri : pohon;

    Info : char;

    Kanan : pohon

    end;

    str = string[MaksChr];

    var root : pohon;

    kalimat : str;

    lagi : char;

    { prosedur untuk membuat simpul baru }

    procedure SimpulBaru(var baru:pohon;hrf:char);

    begin

    new(baru);

    with baru^ do

    begin

    Kiri:=nil;

    Info:=hrf;

    Kanan:=nil

    end

    end; { prosedur SimpulBaru }

    { prosedur untuk menyisipkan simpul non-rekursif }

    procedure NR_SisipSimpul(var akar:pohon;hrf:char);

    var baru,P,Q : pohon;

  • Struktur Data

    Teknik Informatika

    56

    begin

    { Mengalokasi simpul baru }

    SimpulBaru(baru,hrf);

    if akar = nil then

    { Pohon masih kosong }

    akar:=baru

    else

    { Pohon sudah berisi simpul }

    begin

    Q:=akar;

    P:=akar;

    { Mencari posisi yang tepat untuk menyisipkan simpul baru }

    while (hrf P^.Info) and (Q nil) do

    begin

    P:=Q;

    if hrf < P^.Info then

    Q:=P^.Kiri { Mencari ke cabang kiri }

    else

    Q:=P^.Kanan { Mencari ke cabang kanan }

    end;

    if hrf = P^.Info then

    { Huruf sudah ada dalam pohon }

    { Tidak dilakukan apa-apa }

    else if hrf < P^.Info then { Huruf baru }

    P^.Kiri:=baru { Sebagai cabang kiri }

    else

    P^.Kanan:=baru { Sebagai cabang kanan }

    end

    end; { prosedur NR_SisipSimpul }

    { prosedur untuk membuat pohon dari potongan huruf-huruf dalam string }

  • Struktur Data

    Teknik Informatika

    57

    procedure BuatPohon(var akar:pohon;kal:str);

    var i : integer;

    hrf : char;

    begin

    i:=1;

    repeat

    { Mengambil huruf satu per satu }

    hrf:=kal[i];

    if (hrf ' ') and (hrf '.') and (hrf ',') then

    { Menyisipkan karakter selain di atas ke dalam pohon }

    NR_SisipSimpul(akar,hrf);

    inc(i)

    until (hrf = '.') or (i = MaksChr)

    end; { prosedur BuatPohon }

    { prosedur kunjungan preorder LRO rekursif }

    procedure R_PreLRO(akar:pohon);

    begin

    if akar nil then

    begin

    write(akar^.Info,' ');

    R_PreLRO(akar^.Kiri);

    R_PreLRO(akar^.Kanan)

    end

    end; { prosedur R_PreLRO }

    { prosedur kunjungan inorder LRO rekursif }

    procedure R_InLRO(akar:pohon);

    begin

    if akar nil then

    begin

  • Struktur Data

    Teknik Informatika

    58

    R_InLRO(akar^.Kiri);

    write(akar^.Info,' ');

    R_InLRO(akar^.Kanan)

    end

    end; { prosedur R_InLRO }

    { prosedur kunjungan postorder LRO rekursif }

    procedure R_PostLRO(akar:pohon);

    begin

    if akar nil then

    begin

    R_PostLRO(akar^.Kiri);

    R_PostLRO(akar^.Kanan);

    write(akar^.Info,' ')

    end

    end; { prosedur R_PostLRO }

    { prosedur kunjungan preorder RLO rekursif }

    procedure R_PreRLO(akar:pohon);

    begin

    if akar nil then

    begin

    write(akar^.Info,' ');

    R_PreRLO(akar^.Kanan);

    R_PreRLO(akar^.Kiri)

    end

    end; { prosedur R_PreRLO }

    { prosedur kunjungan inorder RLO rekursif }

    procedure R_InRLO(akar:pohon);

    begin

  • Struktur Data

    Teknik Informatika

    59

    if akar nil then

    begin

    R_InRLO(akar^.Kanan);

    write(akar^.Info,' ');

    R_InRLO(akar^.Kiri)

    end

    end; { prosedur R_InRLO }

    { prosedur kunjungan postorder RLO rekursif }

    procedure R_PostRLO(akar:pohon);

    begin

    if akar nil then

    begin

    R_PostRLO(akar^.Kanan);

    R_PostRLO(akar^.Kiri);

    write(akar^.Info,' ');

    end

    end; { prosedur R_PostRLO }

    { program utama }

    begin

    lagi:='y';

    repeat

    writeln('Program Binary Tree');

    writeln;

    writeln('Masukkan string dan akhiri dengan titik.');

    writeln('Maksimum ',MaksChr,' karakter termasuk titik');

    repeat

    write('Masukkan kata : ');

    readln(kalimat);

    writeln;

  • Struktur Data

    Teknik Informatika

    60

    { Memeriksa apakah string masukan valid }

    if kalimat[length(kalimat)] '.' then

    { String tidak diakhiri dengan titik -------- }

    { atau lebih dari jumlah karakter maksimal -- }

    { dengan karakter ke-MaksChr bukan titik ---- }

    begin

    writeln('Akhiri kata anda dengan titik, ulangi lagi !');

    end

    else

    { Input string valid }

    begin

    { Menyusun pohon biner }

    BuatPohon(root,kalimat);

    writeln;

    writeln('Arah kiri ke kanan');

    writeln('----------------------');

    write('Preorder : ');

    R_PreLRO(root);

    writeln;

    write('Inorder : ');

    R_InLRO(root);

    writeln;

    write('Postorder : ');

    R_PostLRO(root);

    writeln;

    writeln;

    writeln('Arah kanan ke kiri');

    writeln('----------------------');

    write('Preorder : ');

    R_PreRLO(root);

    writeln;

    write('Inorder : ');

  • Struktur Data

    Teknik Informatika

    61

    R_InRLO(root);

    writeln;

    write('Postorder : ');

    R_PostRLO(root);

    writeln;

    writeln;

    root:=nil { Mengosongkan pointer root }

    end

    until kalimat[length(kalimat)] = '.';

    write('Coba lagi (Y/N)? ');

    readln(lagi)

    until (lagi = 'n') or (lagi='N');

    end.

    Hasil

    Contoh output program di atas bila benar :

    Program Binary Tree

    Masukkan string dan akhiri dengan titik.

    Maksimum 30 karakter termasuk titik

    Masukkan kata : mastris masih suka kamu.

    Arah kiri ke kanan

    ----------------------

    Preorder : m a i h k s r t u

    Inorder : a h i k m r s t u

    Postorder : h k i a r u t s m

    Arah kanan ke kiri

    ----------------------

    Preorder : m s t u r a i k h

    Inorder : u t s r m k i h a

  • Struktur Data

    Teknik Informatika

    62

    Postorder : u t r s k h i a m

    Coba lagi (Y/N)?

    Latihan

    Buatlah pohon biner dengan urutan :

    Inorder : M, L, O, N, Q, P, S, R, T, K, A, C, B, E, D, G, F, H, I

    Preorder : K, L, M, N, O, P, Q, R, S, T, H, G, E, C, A, B, D, F, I

    Buatlah pohon biner dengan urutan :

    Inorder : 4, 3, 10, 8, 11, 7, 9, 6, 13, 12, 16, 15, 17, 14, 18, 5, 19, 2, 1, 20

    Preorder : 1, 2, 20, 3, 4, 5, 6, 19, 7, 12, 8, 9, 13, 14, 10, 11, 15, 18, 16, 17

    Kesimpulan

    - Model data pohon/tree biner dapat dimodelkan dengan senarai berantai.

    - Dengan kunjungan dan arah yang beda maka menghasilkan nilai yang beda pada kata yang

    sama.

    - Titik pada akhir kata dimaksudkan untuk tanda akhir dari kalimat.

  • Struktur Data

    Teknik Informatika

    63

    GRAPH

    Graph adalah salah satu bentuk struktur data yang berbentuk jaringan yang mempunyai ciri

    sebagai berikut :

    - minimal ada 2 elemen yang disebut node (vertices, titik, point)

    - antara dua node dihubungkan langsung dengan sebuah edge (garis yang unik) yaitu

    berupa ordinat antara 2 node

    Diberikan contoh graph di bawah ini:

    1

    43

    2

    7

  • Struktur Data

    Teknik Informatika

    64

    Penyajian (representasi) dalam komputer dapat disajikan dalam beberapa cara berikut :

    I. The Set Representation (representasi memakai himpunan)

    Graph didefinisikan sebagai bentuk dari himpunan (set). Pertama, terdapat sekumpulan

    simpul, kedua terdapat sekumpulan busur yang menghubungkan simpul-simpul.

    Representasi memakai himpunan dapat diimplementasikan menggunakan set (di dalam

    bahasa Pascal terdapat tipe data set). Deklarasi dengan menggunakan set adalah sebagai berikut:

    Type

    Simpul=1..maxsimpul; {nomor simpul dari 1 sampai jumsimpul}

    Pencacah=0..maxsimpul; {jumlah simpul adalah 0 sampai dengan jumsimpul}

    Settetangga=set of simpul;

    Graph=record

    Ukuran:pencacah;

    A:array[simpul] of set_tetangga

    End;

    Dalam implementasi ini, array A[v] adalah kumpulan semua simpul yang bertetangga

    dengan simpul v.

    Adjacency sets (himpunan ketetanggaan)

    Simpul Set(himpunan)

    1 {2,3}

    2 {3,4}

    3 {}

    4 {1,2,3}

  • Struktur Data

    Teknik Informatika

    65

    II. Adjacency Tables (tabel ketetanggaan)

    Tidak semua bahasa pemrograman menyediakan type constructor set (tipe pembentuk set).

    Array A pada deklarasi tipe graph dapat diubah dengan menggunakan array of array, atau sering

    disebut dengan array dua dimensi.

    Type

    Simpul=1..maxsimpul;

    Pencacah=0..maxsimpul;

    Tabeladjacency=array [simpul,simpul] of Boolean;

    Graph=record

    Ukuran:pencacah;

    A:tabeladjacency

    End;

    Adjacency Table

    1 2 3 4

    1 F T T F

    2 F F T T

    3 F F F F

    4 T T T F

    III. Implementasi menggunakan Linked List

    Fleksibilitas terbaik diperoleh jika implementasi menggunakan linked list baik simpul

    maupun adjacency list-nya.

    Type

    Pointsimpul=^simpul;

    Pointbusur= ^busur;

    Simpul=record

    Busurpertama:pointbusur;

    Simpulberikut:pointsimpul;

    End;

  • Struktur Data

    Teknik Informatika

    66

    Busur=record

    Pointakhir:pointsimpul;

    Busurberikut:pointbusur;

    End;

    Graph=pointsimpul;

    Graph

    simpul 1 busur(1,2)

    simpul 4

    simpul 3

    simpul 2

    busur(4,2)

    busur(2,3)

    busur(1,3)

    busur(4,2)

    busur(2,4)

    busur(4,1)

  • Struktur Data

    Teknik Informatika

    67

    IV. Implementasi Menggunakan List Kontigu (Contiguous List)

    Pada adjacency list kontigu, akan dikelola sebuah pencacah. Valence(valensi) simpul

    adalah jumlah busur yang ada, atau jumlah simpul yang bertetangga dengannya.

    Type

    Simpul=1..maxsimpul;

    Pencacah=0..maxsimpul;

    Adjacencylist=array[simpul] of simpul;

    Graph=record

    Ukuran:pencacah;

    Valensi:array[simpul] of pencacah;

    A:array[simpul] of adjacencylist

    End;

    Simpul Valensi Adjacency list

    1 2 2 3 - - - - -

    2 2 3 4 - - - - -

    3 0 - - - - - - -

    n=4 3 1 2 3 - - - -

    5 - - - - - - - -

    6 - - - - - - - -

    Max=7 - - - - - - - -

    V. Implementasi List Campuran (Mixed Lists)

    Implementasi ini menggunakan list kontigu untuk simpul dan linked storage untuk

    adjacency lists.

    Type

    Simpul=1..maxsimpul;

    Pencacah=0..maxsimpul;

    Pointbusur=^busur;

    Busur=record

    Pointakhir:simpul;

    Busurberikut:pointbusur;

  • Struktur Data

    Teknik Informatika

    68

    End;

    Graph=record

    Ukuran:pencacah;

    Busurpertama:array[simpul] of pointbusur;

    End;

    1

    max=7

    6

    5

    n=4

    3

    2

    2 1

    3

    2 3

    4

    1

    3

    Latihan

    Diketahui matrik berikut :

    Gambarkan dan tuliskan deklarasikan dengan menggunakan array dan list.

    A

    D C

    B

  • Struktur Data

    Teknik Informatika

    69

    Kesimpulan

    Graph adalah sekumpulan titik dan garis, garis ini dapat diwakili dengan koordinat pasangan antara

    dua titik.

    Penyajian graph dapat menggunakan array dan list, pada array yang paling sering digunakan adalah

    Matrik ketetanggaan dan Matrik Jalur.

    Penyajian grap dengan menggunakan list memiliki kelemahan misalnya sulit mengubah matrik

    seandainya ada titik yang ditambah atau diubah, kemungkinan lain adalah terbentuknya matrik

    jarang (sparse matrik) yang memboroskan memori pada saat implementasi.

  • Struktur Data

    Teknik Informatika

    70

    Daftar Pustaka

    1. Liem, Inggriani, Diktat Algoritma dan Pemrograman (Paradigma Prosedural), Teknik

    Informatika ITB, 1997

    2. Munir, Rinaldi, Algoritma dan Pemrograman (buku 1), Informatika, Bandung 2001.

    3. Munir, Rinaldi dan Leony Lidya, Algoritma dan Pemrograman (buku 2), Informatika,

    Bandung 2001.

    4. Wirth, Niklaus, Algorithm+Data Structure = Program, Prentice Hall, 1976

    5. Aho, Alfredd dkk, Data Structures and Algorithms, Addison-Wesley Publising Company,

    1987.

    6. Kruse L. Robert, Data Structures and Program Design, third edition, Prentice Hall,

    Englewood Cliff, New Jersey 1994

    7. Hariyanto, Bambang, Struktur Data, Informatika, Bandung, 2000.

    8. Slamet, Sumantri, dkk, Pengantar Struktur Data, PT. Elex Media Komputindo, Jakarta, 1990.

    9. Santosa Insap, Struktur Data Menggunakan Turbo Pascal, Andi Offset, Yogyakarta,1995.

    10. Sanjaya, Dwi, Struktur Data, J&J Learning, Yogyakarta, 2001.