P. 1
17123192 Bahan Kuliah Struktur Data

17123192 Bahan Kuliah Struktur Data

|Views: 125|Likes:
Dipublikasikan oleh Fadli Lubis

More info:

Published by: Fadli Lubis on Jul 27, 2011
Hak Cipta:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/05/2014

pdf

text

original

Sections

  • 1.Pendahuluan
  • 2.Sebagaitipebaru
  • 3. Mendefinisikan ukuran maksimum elemen larik sebagai konstanta
  • 4.1. Definisi
  • 5.1. Definisi
  • 5.3. Search padaStack
  • 5.4. Operasi Operasidan
  • 6.1. Definisi
  • 6.3. Search padaQueue
  • 6.4. Operasi Operasidan
  • 7.1. DefinisiRekurensDari Pohon
  • 8.Jalan(Path)
  • 9.Derajat
  • 10.Tingkat(Level)
  • 11.Kedalaman(Tinggi)
  • 12.Lebar

STRUKTUR DATA

Pengajar Jaidan Jauhari, MT
Alamat Email jaidan_j@ilkom.unsri.ac.id jaidan_j@yahoo.com

Disarikan Dari Berbagai Sumber, Terutama Dari Diktat Struktur Data Informatika ITB Karangan Dr. Inggriani Liem
Halaman 1

SILABUS MATERI KULIAH
Pengantar Struktur Data Review Record dan Array Stack (Tumpukan) Queue (Antrian) Linked List dan Variasi List MultiList Pohon Biner Graph

Halaman

2

BUKU SUMBER
1. 2. 3. 4. 5. 6.

Inggriani Liem. 1997. Diktat Kuliah Algoritma dan Pemrograman Prosedural. Bandung : ITB Inggriani Liem. 2003. Diktat Kuliah Struktur Data. Bandung : ITB Rinaldi Munir. 2003. Algoritma dan Pemrograman II. Bandung : Penerbit Informatika Bambang Wahyudi. 2004. Struktur Data dan Algoritma. Yogyakarta : Andi Offset Dwi Sanjaya. 2001. Bertualang dengan Struktur Data di Planet Pascal. Yogyakarta : JJ Learning P. Insap Santoso.1997. Struktur Data dengan Turbo Pascal. Yogyakarta : Andi Offset

Halaman

3

Komponen Penilaian Tugas 20% Ujian 1 20 % (Pertemuan ke-4) Ujian 2 20% (Pertemuan ke-8) Ujian 3 20% (Pertemuan ke-12) Ujian Akhir Semester 20% Halaman 4 .

Memakai sepatu tertutup 2.Aturan dan Sanksi-sanksi Kehadiran minimal 80%. Tidak memakai aksesoris yang tidak diijinkan 4. yang ditunjukkan antara lain 1. dan lain-lain Selama perkuliahan berlangsung mahasiswa tidak diijinkan meninggalkan ruang kuliah kecuali sangat terpaksa dan itupun harus membuat surat ijin dan hanya boleh satu kali Halaman 5 . kurang dari 80% tidak lulus (mendapat nilai E) Keterlambatan maksimal 10 menit (Lebih dari 10 menit tidak diijinkan memasuki ruangan) Pengumpulan Tugas yang melebihi waktu yang telah ditentukan akan diberikan nilai nol Kecurangan dalam bentuk apapun akan mendapatkan nilai E Mahasiswa berpakaian rapi dan sopan. Tidak memakai pakaian yang kurang dasar atau lebih dasar 5. Memakai baju berkerah 3.

direkam atau direpresentasikan dalam bentuk tulisan. suara. sinyal atau simbol Halaman 6 . fakta dunia Fakta atau keterangan tentang kenyataan yang disimpan.PENGERTIAN STRUKTUR DATA Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa dipakai secara efisien Sedangkan data adalah representasi dari nyata. gambar.

misalnya String 2. misalnya Integer. real. boolean dan karakter b.Secara garis besar type data dapat dikategorikan menjadi : 1. misalnya array dan record Halaman 7 . Struktur Data. Type data sederhana tunggal. Type data sederhana majemuk. Struktur data sederhana. meliputi a. Type data sederhana a.

b. sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana. yang terdiri dari Linier : Stack. Queue. serta List dan Multilist Non Linier : Pohon Biner dan Graph Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat. Struktur data majemuk. Halaman 8 .

Struktur data yang ″standar″ yang biasanya digunakan dibidang informatika adalah : List linier (Linked List) dan variasinya Multilist Stack (Tumpukan) Queue (Antrian) Tree ( Pohon ) Graph ( Graf ) Halaman 9 .

Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Contoh : 1. type Titik : record <x : real. y : real> jika P dideklarasikan sebagai Titik maka mengacu field pada P adalah P. Halaman 10 . Nama rekaman ditentukan oleh pemrogram.REVIEW RECORD (REKAMAN) Disusun oleh satu atau lebih field. Rekaman disebut juga tipe terstruktur.x dan P.y.

Didefinisikan tipe terstruktur yang mewakili Jam yang dinyatakan sebagai jam (hh).2. {0…59} ss : integer {0…59} > Jika J adalah peubah (variabel) bertipe Jam maka cara mengacu tiap field adalah J.mm dan J. {0…23} mm : integer. menit (mm) dan detik (ss).ss Halaman 11 .hh. maka cara menulis type Jam adalah : type JAM : record <hh : integer. J.

Halaman 12 . } Titik. /*0…59*/ } Jam. type JAM : record <hh : integer. /*0…23*/ int mm. /*0…59*/ int ss. 2. {0…23} mm : integer.Terjemahan dalam bahasa C : 1. y : real> diterjemahkan menjadi : typedef struct { float x. float y. type Titik : record <x : real. {0…59} ss : integer {0…59} > Diterjemahkan menjadi : typedef struct { int hh.

Halaman 13 . Setiap elemen diakses langsung melalui indeksnya.REVIEW ARRAY (LARIK) 1. Indeks larik harus tipe data yang menyatakan keterurutan misalnya integer atau karakter. Pendahuluan Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe sama.

Tipe elemen larik dapat berupa tipe sederhana. tabel atau vektor Halaman 14 . tipe terstruktur atau tipe larik lain.Banyaknya elemen larik harus sudah diketahui sebelum program dieksekusi. Nama lain array adalah Larik.

Sebagai tipe baru Contoh : type LarikInt : array[1.100] of integer P : LarikInt Halaman 15 ...Cara Pendefinisian Array 1. Sebagai Peubah Contoh : L : array[1.50] of integer NamaMhs : array[‘a’..’j’] of string 2.

3.. Halaman 16 .Nmaks] of integer P : LarikInt Cara menterjemahkan ke bahasa C : #define Nmaks 100 typedef int Larikint[Nmaks+1]. Mendefinisikan ukuran maksimum elemen larik sebagai konstanta Contoh : Const Nmaks = 100 type Larikint : array[1. Larikint P.

Contoh cara mengacu elemen larik adalah : L[4] {mengacu elemen keempat dari larik L } NamaMhs[‘b’] {mengacu elemen kedua dari larik NamaMhs} P[k] {mengacu elemen ke-k dari larik P.Cara Mengacu Elemen Larik Elemen larik diacu melalui indeksnya. asalkan nilai k sudah terdefinisi } Halaman 17 . Nilai indek harus terdefinisi.

N] dengan nol} {K. input N:integer) {menginisialisasi setiap elemen larik A[1. Awal : N adalah banyak elemen efektif larik. Akhir : seluruh elemen larik A bernilai nol} Deklarasi : K : integer Deskripsi : for k 1 to N do A[k] 0 endfor Halaman 18 .. misalnya menginisialisasi dengan nilai 0 seperti di bawah ini : Procedure InisDgn0(output A:larik. nilainya terdefinisi} {K.Menginisialisasi Larik menginisialisasi elemen larik adalah memberikan harga awal untuk seluruh elemen larik.

N] dengan nilai yang dibaca dari piranti masukan} {K. input N:integer) {mengisi elemen larik A[1. Akhir : seluruh elemen larik A berisi nilai-nilai yang dibaca dari piranti masukan} Deklarasi : K : integer Deskripsi : for k 1 to N do read (A[k]) endfor Halaman 19 ..Mengisi elemen larik dari piranti masukan Elemen larik dapat diisi dengan nilai yang dibaca dari piranti masukan seperti contoh di bawah ini : Procedure BacaLarik(output A:larik. nilainya terdefinisi} {K. Awal : N adalah jumlah elemen efektif larik.

.Larik Bertype Terstruktur Larik tidak hanya dapat berisi data bertype tunggal. Nilai : char > TabMhs : array[1.Nmaks] of Mahasiswa Halaman 20 . nama_mhs : string. tapi dapat juga berisi data yang bertipe terstruktur Contoh : const Nmaks = 100 type Mahasiswa : record <nim : integer. KodeMK : string.

Write(TabMhs[k].Contoh Cara mengacu elemen TabMhs : 1. TabMhs[2].Nim mengacu field Nim dari elemen kedua larik 2.KodeMK) menuliskan field KodeMK dari elemen ke k dari larik Halaman 21 .

Untuk setiap field definisikan type data yang cocok Halaman 22 .Tugas 1 Buatlah dalam notasi algoritma atau bahasa C : 1. Kota Nasabah.Definisikan sebuah type terstruktur untuk menyatakan data nasabah disebuah bank. Data nasabah terdiri atas field Nomor Account. Alamat Nasabah. Nama Nasabah. dan Nomor Telpon Nasabah.

Petunjuk : Gunakan notasi pengulangan untuk menyelesaikan permasalahan tersebut Tugas dikumpulkan pada pertemuan berikutnya disertai listing program dan contoh keluarannya Halaman 23 . dengan N diinputkan dari papan ketik. untuk memasukkan data nasabah sebanyak N. kemudian menuliskan kembali semua data nasabah dalam bentuk matrik.2.Dari soal nomor 1 buatlah program dalam bahasa pemrograman berbasis bahasa C.

misalnya menjadi record dalam Pascal/Ada dan Struct dalam bahasa C Halaman 24 . Type diterjemahkan menjadi type terdefinisi dalam bahasa pemrograman yang bersangkutan.ADT (Abstract Data Type) ADT adalah definisi type dan sekumpulan primitif (operasi dasar) terhadap type tersebut.

pembentuk nilai type. 2. Primitif dikelompokkan menjadi : 1.Primitif dalam konteks pemrograman prosedural. Konstruktor/Kreator. Selektor. Biasanya namanya diawali dengan Make. untuk mengakses komponen type. Biasanya namanya diawali dengan Get. Halaman 25 . diterjemahkan menjadi fungsi dan prosedur.

Validator komponen type. Prosedur Pengubah nilai komponen 4. untuk interface dengan input/output device Halaman 26 . Baca/tulis. yaitu untuk menghancurkan nilai objek. yang dipakai untuk mengetes apakah dapat membentuk type sesuai batasan. Destruktor/Dealokator.3. sekaligus memori penyimpannya 6. 5.

7. dalam pemrograman biasanya hanya terdefinisi untuk bilangan numerik. Operator Relasional terhadap type tersebut untuk mendefinisikan lebih besar. Konversi dari type tersebut ke type dasar dan sebaliknya Halaman 27 . lebih kecil. sama dengan dan sebagainya. 8. Aritmatika terhadap type tersebut. 9.

Definisi/spesifikasi type dan primitif . dan pre kondisi jika ada b. domain. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan Selektor dan Konstruktor Halaman 28 .Spesifikasi type sesuai dengan bahasa yang dipakai . Fungsi : nama. Body/realisasi dari primitif. yaitu : a. yaitu : 1. Prosedur : Keadaan Awal. Keadaan Akhir dan proses yang dilakukan 2. berupa kode program dalam bahasa yang bersangkutan.ADT biasanya diimplementasi menjadi dua buah modul. range.Spesifikasi dari primitif sesuai dengan kaidah dalam konteks prosedural.

Halaman 29 .

1. Definisi List linier adalah sekumpulan elemen bertype sama. Next : address > Halaman 30 . yang mempunyai keterurutan tertentu. yang setiap elemennya terdiri dari 2 bagian : Type Elmtlist = record < Info : InfoType. Linked List (List Linier) 4.4.

Dengan demikian. Next adalah address dari elemen berikutnya ( suksesor ). maka elemen berikutnya dapat diakses secara suksesif dari elemen pertama tersebut Halaman 31 .Dengan Info Type adalah sebuah type terdefenisi yang menyimpan informasi sebuah elemen list . jika didefinisikan First adalah alamt elemen pertama list.

sebuah list linier dikenali : elemen pertamanya. Dengan alamat tersebut Informasi yang tersimpan pada elemen list dapat diakses . yang dapat diakses melalui field NEXT setiap elemen mempunyai alamat. alamat harus terdefenisi . biasanya melalui alamat elemen pertama yang disebut : First alamat elemen berikutnya ( suksesor ). Ada berbagai cara untuk mengenali elemen akhir Halaman 32 . jika kita mengetahui alamat sebuah elemen .Untuk mengacu sebuah elemen . yaitu tempat elemen disimpan dapat diacu. elemen terakhirnya.Jadi.

Jika L adalah list . dan P adalah address : Alamat elemen pertama list L dapat diacu dengan notasi : First (L) Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi : Info(P) Next(P) Halaman 33 .

jika First (L) = Nil 2. List L adalah List kosong .Beberapa defenisi : 1. dengan salah satu cara adalah karena Next(Last) =Nil Halaman 34 . Elemen terakhir dikenali.

Seringkali diperlukan untuk memproses setiap elemen list dengan cara yang sama. Halaman 35 . yaitu “mengunjungi” setiap elemen list untuk diproses. Skema traversal untuk list linier List terdiri dari sekumpulan elemen.II. Karena itu salah primitif operasi konsultasi dasar pada struktur list adalah traversal.

maka traversal list secara natural dilakukan dari elemen pertama.Karena Urutan akses adalah dari elemen pertama sampai dengan elemen terakhir. Halaman 36 . dan seterusnya sampai dengan elemen terakhir. suksesornya.

mungkin kosong } {K. Dengan MARK. Awal : List L terdefinisi .Skema traversal yang dipakai adalah Sbb : Procedure SKEMAListTransversal1( Input L : List ) {K. tanpa pemrosesan khusus pada list kosong} Deklarasi Halaman 37 . Akhir : semua elemen list L dikunjungi dan telah diproses } {Proses : Traversal sebuah list linier.

type terdefenisi } Deskripsi : Inisialisasi P ← First ( L ) While ( P ≠Nil ) do Proses ( P ) P ← Next ( P ) endwhile Terminasi Halaman { First Element } { Next element } 38 .Deklarasi : P : address { address untuk traversal .

Akhir : semua elemen list L “dikunjungan “ dan telah diproses } { Proses : Transversal sebuah list linier yang diidentifikasi oleh elemen pertama L . Awal : List L terdefenisi . Dengan MARK dan pemrosesan khusus pada list kosong } Deklarasi : Halaman 39 .Procedure SKEMAListTransversal 2( Input L : List ) { K. mungkin kosong } { K.

type terdefenisi } Deskripsi If (First ( L ) = Nil) then Write ( ‘List kosong ‘ ) else Halaman 40 .Deklarasi P : address { address untuk traversal .

Insialisasi P ← First ( L ) Repeat Proses ( P ) P ← Next ( P ) until P=Nil Terminasi { First Element } { Next element } Halaman 41 .

1. akan dilakukan suatu proses terhadap elemen Halaman 42 list tersebut. Pencarian dapat berdasarkan nilai. Skema Sequential Search untuk list linier Selain traversal.III. Biasanya dengan alamat yang ditemukan. atau berdasarkan alamat. proses pencarian suatu elemen list adalah primitif yang sering kali didefinisikan pada struktur list. III. . output adalah address Search ini sering dipakai untuk mengenali suatu elemen list berdasarkan nilai informasi yang disimpan pada elemen yang dicari. Search suatu Nilai.

Found: Boolean ) { K. Output P : address. Awal : List linier L sudah terdefinisi dan siap dikonsultasi. Found berharga true jika harga X yang dicari ketemu. dimana X diketemukan. X : InfoType. P = Nil jika tidak ketemu.Procedure SKEMAListSearch1 ( Input L : List. false jika tidak } Halaman 43 . X terdefenisi } { K.Akhir : P : address pada pencarian beurutan.

Semua elemen diperiksa dengan intruksi yang sama. versi dengan Boolean} Deklarasi Deskripsi Halaman 44 .{Proses : Sequential Search harga X pada sebuah list linier L.

P ← First ( L ) Found ← false While ( P ≠ Nil ) and ( not found ) do if X = Info (P) then Found ←True else P ← Next (P) endif endwhile { P = Nil or Found} {Jika Found maka P adalah address dimana harga yang dicari diketemukan} Halaman 45 .

2. Semua elemen diperiksa dengan intruksi yang sama } Halaman 46 .Akhir : Jika ada elemen list beralamat P. P : address. Found: Boolean ) {K. Found berharga false } {Proses : Sequential Search @ P pada sebuah list linier L.III. Found berharga true. Jika tidak ada elemen list beralamat P. Search suatu Elemen yang beralamat tertentu Procedure SKEMAList Search@( Input L : List. Awal : List linier L sudah terdefinisi dan siap dikonsultasi. X terdefenisi } {K.

Deklarasi Pt : address Deskripsi Pt ← First ( L ) Found ← false While ( Pt ≠ Nil ) and ( not found ) do if Pt = P then Found ← true else Pt ← Next (Pt) endif endwhile { Pt = Nil or Found} { Jika Found maka P adalah elemen list} Halaman 47 .

Insert. Concat dan UpdateList Halaman 48 . penambahan atau penghapusan elemen yang dapat ditulis sebagai berkut : Jika diberikan L. L1 dan L2 adalah list linier dengan elemen ElmtList. Definisi fungsional list linier dan algoritmanya Secara fungsional. pada sebuah list linier biasanya dilakukan pembuatan. Delete. maka operasi yang dapat dilakukan : ListEmpty. CreateList.IV.

Halaman 49 . Operasi pada list kosong sering kali membutuhkan penanganan khusus Realisasi algoritmik dari definisi fungsional ini adalah sebuah fungsi sebagai berikut. Pengetesan List Kosong Pemeriksaan apakah sebuah list kosong sangat penting. karena Keadaan Awal dan Keadaan Akhir beberapa prosedur harus didefinisikan berdasarkan keadaan list.IV. 1.

Mengirimkan true jika list kosong.Function IsEmptyList (L : List ) → boolean { Test apakah sebuah list L kosong. false jika tidak kosong} Deklarasi Deskripsi return(First (L) = Nil) Halaman 50 .

2 Pembuatan sebuah elemen pada list linier Pembuatan sebuah list berarti membuat sebuat list KOSONG. dsb). Realisasi algoritmik dari defenisi funfsional ini adalah sebuah prosedur sebagai berikut.IV. yang selanjutnya siap diproses (ditambah elemennya. Halaman 51 .

Awal : Sembarang } K. Akhir : terbentuk list L yang kosong : First (L) diinisialisasi dengan NIL ) Proses : Membuat list kosong} Deklarasi Deskripsi First (L) ← Nil Halaman 52 .Procedure CreateList( Output L : List ) {K.

3 Penyisipan sebuah elemen pada list linier Fungsi insert (penyisipan) harus dijabarkan lebih rinci. Halaman 53 . setelah sebuah address P atau penyisipan menjadi elemen terakhir atau bahkan menjadi elemen ditengah Penyisipan sebuah elemen dapat dilakukan terhadap sebuah elemen yang sudah dialokasi (diketahui address-nya ).IV. atau sebuah elemen yang hanya diketahui nilai Info-nya (berarti belum dialokasi). karena dapat menjadi penyisipan sebagai elemen pertama.

Procedure InsertFirst (Input/Output L:List. Awal : List L mungkin kosong {K.1. INSERT-First (Address) Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list.IV. Input P: address) {K. 2. Akhir : P adalah elemen pertama list L} {Proses : Insert sebuah elemen beralamat P sebagai elemen pertama list linier L yang mungkin kosong} Deklarasi Deskripsi Next (P) ← First (L) First (L) ← P Halaman 54 .

Awal : List L mungkin kosong } { K. Procedure InsFirst (Input/output L :List. jika alokasi berhasil. Akhir : Sebuah elemen dialokasikan dan menjadi elemen pertama list L.2 INSERT-First (Nilai) Menambahkan sebuah elemen yang diketahui nilainya sebagai elemen pertama list. Jika alokasi gagal list tetap seperti semula } { Proses : Insert sebuah elemen sebagai elemen pertama list} Deklarasi P : address Deskripsi Alokasi (P) If P ≠ Nil then Info (P) ← E Next (P) ← First (L) First (L) ← P Halaman 55 .2. Input E : infotype ) { K.IV.

prec ≠ Nil. P ≠ Nil. Next (P) = Nil K. Awal : Prec adalah elemen list. Akhir : P menjadi suksesor Prec Proses : Insert sebuah elemen beralamat P pada List linier L} Deklarasi Deskripsi Next (P) ← Next (Prec) Next (Prec) ← P Halaman 56 . P sudah dialokasikan.2. Prec: address ) {K. INSERT-AFTER Menyisipkan sebuah elemen beralamat P sebagai suksesor dari sebuah elemen list linier yang beralamat Prec Procedure InsertAfter ( Input P.2.IV.

P ≠ Nil. Input P : address) {K. Ada dua kemungkinan list kosong atau tidak kosong Procedur InsertLast@(Input/Output L: List. P sudah dialokasi.3. 2. Akhir : P adalah elemen terakhir list L Proses : Insert sebuah elemen beralamat P sbg elemen terakhir dari list linier L yg mungkin kosong } Halaman 57 . Next (P) = Nil K.IV. INSERT – Last Menyisipkan sebuah elemen beralamat P sebagai elemen terakhir sebuah list linier. Awal : List L mungkin kosong.

Deklarasi
Last : address { address untuk traversal} { insert sebagai elemen pertama}

Deskripsi
If Fisrt (L) = Nil then InsertFirst(L, P) Else { Traversal list sampai address terakhir} Last ← First (L) While (Next (Last ) ≠ Nil ) do Last ← Next (Last ) endwhile {Next ( Last) = Nil, Last adalah elemen terakhir; insert P after last } InsertAfter (P, Last) endif
Halaman 58

Procedure InsertLast(Input/output L :List, Input E : Infotype) { K. Awal : List L mungkin kosong, P sudah dialokasi, P ≠ Nil, Next(P)=Nil K. Akhir : P adalah elemen terakhir list L Proses : Insert sebuah elemen beralamat P sebagai elemen terakhir dari list linier L yang mungkin kosong }

Deklarasi
Last : address { address untuk traversal }

Deskripsi
Alokasi (P) If (P ≠ Nil) then Info(P) ←E InsertLast@(L,P)
Halaman 59

IV.3. Penghapusan sebuah elemen pada list linier
Penghapusan harus dijabarkan lebih rinci, Karena penghapusan elemen dapat merupakan pertama, setelah sebuah address P atau penghapusan elemen terakhir. Perbedaan ini melehirkan 3 operasi dasar penghapusan elemen list yang diturunkan dari definisi fungsional inimenjadi realisasi algoritma. Operasi penghapusan dapat mengakibatkan list kosong, jika list semula hanya terdiri dari satu elemen.
Halaman 60

Elemen yang dihapus dicatat alamatnya Procedure DeleteFirst@ (Input/Output L : List. L yang baru adalah Next (L) Deklarasi Deskripsi P ← First (L) First (L) ← Next ( First (L) ) Halaman 61 . Akhir : menghapus elemen pertama L P adalah @ elemen pertama L sebelum penghapusan. Awal : List L tidak kosong.1. Output P : address) {K. minimal 1 elemen pertama pasti ada } {K. DELETFirst : menghapus elemen pertama list linier a.IV.3.

Akhir : menghapus elemen pertama L E adalah Nilai elemen pertama L sebelum penghapusan. L yang baru adalah Next (L) Deklarasi Deskripsi P ← First (L) E ← Info (P) First (L) ← Next ( First (L) ) Dealokasi (P) Halaman 62 .Procedure DeleteFirst (Input/Output L : List. Output E : InfoType) {K. minimal 1 elemen pertama pasti ada } {K. Awal : List L tidak kosong.

Akhir : Menghapus suksesor Prec. Next (Prec) ≠ Nil } Prec ≠elemen terakhir K. Next (Prec) yang baru adalah suksesor dari suksesor Prec sebelum penghapusan } Deklarasi Deskripsi P ← Next (Prec) Next (Prec) ← Next (Next (Prec)) Halaman 63 . Delete After : Penghapusan suksesor sebuah elemen : Procedure DeleteAfter ( Input Prec : adrress. P adalah @ suksesor Prec sebelum penghapusan. 3.IV. Output P : address ) { K.2. Awal : List tidak kosong. Prec adalah elemen list .

P mungkin elemen pertama. List. “tengah” atau terakhir } Deklarasi Prec : address { alamat predesesor } Deskripsi Halaman 64 . Output P : address ) { K. Akhir : Menghapus P dari list. P adalah elemen list L K. maka penghapusan sebuah beralamat P dapat dilakukan dengan : mencari predesesor dari P. yaitu alamat Prec memakai DeleteAfter (Prec) Procedure DeleteP ( Input/Output L . Awal : List L tidak kosong .Dengan primitip ini.

{ Cari predesesor P } if (P = First (L) then {Delete list dengan satu elemen } DeleteFirst (L. P) endif Halaman 65 .P) else Prec ← First (L) While (Next(Prec) ≠ P ) do Prec ← Next (Prec) endwhile { Next (Prec) = P . hapus P } DeleteAfter (Prec .

satunya elemen list linier.3. 3. Akhir : menghapus elemen terakhir dari list. kalau last bukan satu. Ada dua kasus. Procedure DeleteLast (Input L : List. yaitu list menjadi kosong atau tidak. list mungkin menjadi kosong Proses : P adalah alamat elemen terakhir list sebelum penghapusan } Halaman 66 . Output P : address) {K. Persoalan selanjutnya menjadi persoalan DeleteAfter. DELETELast : Menghapus elemen terakhir list dapat dilakukan jika alamat dari elemen sebelum elemen terakhir diketahui.IV. Awal : List L tidak kosong. minimal mengandung 1 elemen K.

preclast = sebelum last } P ← Last If Preclast = Nil then { list dg 1 elemen. Last ← Next ( last ) endwhile { Next ( Last ) = Nil. jadi kosong } First(L) ← Nil Else Next ( preclast )← Nil endif Halaman 67 . preclast :address { address untuk traversal } Deskripsi { Find last dan address sebelum last } Last ← First (L) Preclast ← Nil { predesesor dari L tak terdefenisi } While ( Next ( Last ) ≠ Nil do { Traversal list sampai @ terakhir } Preclast ← Last .Deklarasi Last . Last adalah elemen terakhir.

awal : L1 ≠ L2. Output : L3 : List ) {K. L2 : List. Dalam contoh berikut list kedua disambungkan ke list pertama. Jadi Last (L1) menjadi predesesor First (L2).IV.dan L3 ≠ L2. L1. L2 ditaruh dibelakang L1 } Halaman 68 . L1 ≠ L3. L2 mungkin kosong K. Konkatenasi dua buah list linier Concat adalah menggabungkan dua list. 5. Akhir : L3 adalah hasil konkatenasi (menyambung) dua buah list linier. Realisasi algoritma adalah sebuah prosedur sebagai berikut : Procedure CONCAT (Input L1.

Deklarasi Last1 : address { alamat elemen terakhir list pertama } Deskripsi Cratelist (L3) {inisialisasi list hasil } If Fist (L1) = Nil then First (L3) ← First (L2) Else { Traversal list 1 sampai address terakhir. Hubungkan last dengan Fisrt 2} First (L3) ← First (L1) Last1 ← First (L1) While ( Next (Last 1 ) ≠ Nil ) do Last1 ← Next (Last 1) endwhile {Next ( Last 1) ← First (L2)} Next(Last1) ← First (L2)} endif Halaman 69 .

Bagian Deklarasi dari algoritma pada List Linier : Deklarasi type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtL type ElmtL = record <Info : InfoType. Next : Address > type List = record <First : Address > {Deklarasi Nama Peubah} L : List P : Address Halaman 70 .

Prosedur untuk menghitung rata-rata elemen list yang ganjil Halaman 71 . Untuk data yang bagaimanakah yang dapat direpresentasikan dengan menggunakan struktur data list linier? III. Apakah perbedaan struktur data list linier ditinjau dari sudut pandang operasinya.Soal-Soal Latihan I. buatlah : 1. Sebuah prosedur untuk menghitung jumlah elemen list yang genap 2. Diketahui sebuah list linier dengan elemen bertipe integer. jika dibandingkan dengan struktur data stack dan queue? II.

3. Fungsi untuk mencari elemen list yang minimum 3. Fungsi untuk mengirimkan elemen pertama list 2. Fungsi untuk menghitung banyaknya elemen yang lebih besar dari 100 Halaman 72 . Prosedur untuk mencetak elemen list yang genap IV. Diketahui sebuah list dengan elemen bertype integer terurut membesar. buatlah : 1. Prosedur untuk menghitung banyaknya elemen list yang positif (lebih besar dari nol) 4.

Halaman 73 .

Definisi STACK (Tumpukan) adalah list linier yang : 1. Dikenali elemen puncaknya (TOP) 2. Stack (Tumpukan) 5.1.5. Aturan penyisipan dan penghapusan elemennya tertentu : -Penyisipan selalu dilakukan “di atas “ TOP -Penghapusan selalu dilakukan pada TOP Halaman 74 .

TOP adalah satu-satunya alamat tempat terjadi operasi.Karena aturan penyisipan dan penghapusan semacam itu. Next : address > Halaman 75 . sebuah STACK dapat digambarkan sebagai list linier yang setiap elemennya adalah Type ElmtS = record <Info : InfoType. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus.Dikatakan bahwa elemen Stack akan tersusun secara LIFO (Last In First Out). Maka secara lojik.

dan address adalah “alamat” dari elemen Selain itu alamat elemen terbaru (TOP) dicatat. supaya penambahan dan penghapusan dengan mudah dan efisien dapat dilakukan. sedangkan alamat elemen yang paling “bawah”. Halaman 76 . TOP adalah elemen pertama list.dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap elemen stack. yaitu yang paling lama biasanya diebut BOTTOM.

Sehingga jika S adalah sebuah Stack, dan P adalah address maka Top (S) adalah alamat elemen TOP, dimana operasi penyisipan/penghapusan dilakukan. Info (P) adalah informasi yang disimpan pada alamat P Next (P) adalah alamat suksesor P ElmtS (P) adalah sebuah elemen stack yang beralamat P Stack kosong adalah Stack dengan Top (S) = Nil ( tidak terdefinisi )
Halaman 77

Bagian Deklarasi dari algoritma pada Stack : Deklarasi type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtS type ElmtS = record <Info : InfoType, Next : Address > type Stack = record <TOP : Address> {Deklarasi Nama Peubah} S : Stack P : Address
Halaman 78

5.2. Traversal pada Stack
Pada stack, jarang sekali dilakukan traversal, karena keunikan Stack justru pada operasi yang hanya menyangkut elemen TOP. Namun dibutuhkan traversal misalnya untuk mencetak isi Stack.

5.3. Search pada Stack
Pada stack, elemen yang diproses hanyalah elemen pada TOP. Maka hampir tidak pernah dilakukan search.
Halaman 79

Operasi dan fungsi dasar pada STACK.4. Test STACK kosong Mengetahui bahwa stack kosong atau tidak sangat penting. sebab semua operasi akan dilakukan berdasarkan kosong atau tidaknya suatu Stack.5. a. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Stack sebagai berikut : Halaman 80 .

jika tumpukan kosong. false jika tumpukan tidak kosong} Deklarasi Deskripsi return (Top (S) = Nil) Halaman 81 .function StackEmpty (S : STACK) → Boolean { TEST stack kosong : Mengirim true.

Awal : sembarang. Pembuatan STACK kosong Membuat Stack kosong diperlukan untuk memulai memakai stack. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi stack sebagai berikut Procedure CreateEmptyS (Output S : STACK) {K. K.b. Akhir : sebuah stack S yang kosong siap dipakai terdefinisi Proses : Membuat stack kosong } Deklarasi Deskripsi Top (S) ← Nil Halaman 82 .

Berikut ini akan diberikan skema prosedur penyisipan tersebut. Prosedur pertama menambahkan suatu ElmtS yang diketahui alamatnya dan yang kedua menambahkan suatu nilai ElmtS yang diberikan. Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur yang melakukan penambahan elemen stack sebagai berikut. Halaman 83 .c. dan karena alamat TOP diketahui maka prosesnya sederhana.Penambahan sebuah elemen pada STACK (Push) Penambahan selalu dilakukan pada TOP.

Akhir : Top (S) adalah P} Deklarasi Deskripsi { insert sebagai elemen pertama } Next (P) ← TOP (S) TOP (S) ← P Halaman 84 .Awal : Stack mungkin kosong. Next (P) = Nil} {K. dengan elemen yang diketahui alamatnya} {K.procedure Push@ (Input/Output S : STACK Input P : address) {Menambahkan sebuah elemen baru pada TOP sebuah stack. P terdefinisi (berarti terdefinisi informasinya.

E terdefenisi . Akhir : TOP (S) berisi E ) Deklarasi P : address Deskripsi Alokasi ( P ) { alokasi selau berhasil } Info(P) ← E { insert sebagai elemen pertama } Next(P) ← TOP(S) TOP(S) ← P Halaman 85 . alokasi alamat selalu berhasil } { K.procedure Push( Input / Output S:STACK Input E: InfoType ) { Menambahkan sebuah elemen baru pada TOP sebuah stack. Awal : Stack mungkin kosong . dengan elemen yang diketahui informasinya } { K.

hanya saja harus diperhitungkan bahwa mugkin Stack akan menjadi kosong akibat terjadinya penghapusan. Penghapusan sebuah elemen pada STACK (Pop) Penghapusan elemen Stack selalu dilakukan pada TOP . Jika Stack menjadi kosong . maka harga TOP harus diganti . dan membebaskan alamat ( dealokasi ) yang tadinya dipakai Halaman 86 . Prosedur pertama mengambil suatu Elmts dengan menyimpan alamatnya dan yang kedua mengambil nilai .d. Realisasi algoritma dari definisi funsional ini adalah salah satu dari dua buah prosedur yang melakukan pengambilan elemen stack sebagai berikut .

stack tidak boleh kosong dan mungkin menjadi kosong } Deklarasi Deskripsi P ← TOP (S) TOP (S) ← Next(TOP(S)) Halaman 87 .procedure PopStack@(Input/Output S : STACK Output P : address) {K. sehingga informasinya dapat diakses melalui P Proses : Menghapus elemen stack.Akhir : Alamat elemen Top (S) disimpan pada P.Awal : Stack tidak kosong K.

procedure PopStack(Input/Output S : STACK Output E : InfoType) {K.Akhir : Alamat elemen Top (S) disimpan pada E. stack tidak boleh kosong dan mungkin menjadi kosong } Deklarasi P : address Deskripsi P ← TOP (S) E ← Info(P) TOP (S) ← Next(TOP(S)) Dealokasi (P) Halaman 88 . alamat TOP yang lama didealokasi Proses : Menghapus elemen stack.Awal : Stack tidak kosong K.

bagaimana jika terpaksa harus menghapus elemen yang paling bawah? Halaman 89 . Mengapa pada Stack Traversal dan Search jarang dilakukan? 3. Mengapa cara penyusunan elemen pada Stack sering disebut tersusun secara LIFO? 2.Soal-Soal Latihan 1. Penghapusan elemen pada Stack selalu dilakukan pada elemen yang paling atas.

jika diketahui sebuah stack dengan elemen bertype integer. Buatlah sebuah fungsi untuk mengirimkan elemen Stack yang maksimum jika diketahui elemen Stack terurut mengecil bertype integer Halaman 90 . Buatlah juga fungsi untuk menghitung rata-rata elemen Stack yang genap 7. Buatlah sebuah fungsi untuk mengirimkan elemen pertama Stack 8. 5. Buatlah fungsi/prosedur untuk mencetak elemen stack yang ganjil 6.4. Buatlah sebuah fungsi untuk menghitung jumlah elemen stack yang genap.

Halaman 91 .

Penyisipan selalu dilakukan setelah elemen terakhir .Penghapusan selalu dilakukan pada elemen pertama 3. Aturan penyisipan dan penghapusan elemennya disefinisikan sebagai berikut : .1. Queue (Antrian) 6. Definisi Queue (Antrian) adalah list linier yang : 1. Dikenali elemen pertama (Head) dan elemen terakhirnya (Tail) 2.6. Satu elemen dengan elemen lain dapat diakses melalui informasi Next Halaman 92 .

sebuah Queue dapat digambarkan sebagai list linier yang setiap elemennya adalah : Type ElmtQ = record <Info : InfoType. Antrian job dalam sistem operasi 2. Next : address > Halaman 93 .Struktur data ini banyak dipakai dalam informatika misalnya untuk merepresentasi : 1. Antrian dalam dunia nyata Maka secara lojik.

Maka jika Q adalah Queue dan P adalah Address.dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap elemen queue. dan address adalah “alamat” dari elemen Selain itu alamat elemen Pertama (Head) dan elemen terakhir (Tail) dicatat. penulisan untuk Queue adalah : Head(Q) Tail(Q) Next(P) Info(P) Halaman 94 .

Bagian Deklarasi dari algoritma pada Queue : Deklarasi type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtQ type ElmtQ = record <Info : InfoType. Tail : Address> {Deklarasi Nama Peubah} Q : Queue P : Address Halaman 95 . Next : Address > type Queue = record <Head : Address.

karena keunikan Queue justru pada operasi yang hanya menyangkut elemen pertama dan terakhir. Halaman 96 . Traversal pada Queue Pada queue. Maka hampir tidak pernah dilakukan search.6. jarang sekali dilakukan traversal. Namun dibutuhkan traversal misalnya untuk mencetak isi Antrian. Search pada Queue Pada Queue.2. 6.3. elemen yang diproses hanyalah elemen pada pertama dan terakhir.

a. Test Queue kosong Mengetahui bahwa Queue kosong atau tidak sangat penting. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Queue sebagai berikut : Halaman 97 . Operasi dan fungsi dasar pada Queue.4. sebab semua operasi akan dilakukan berdasarkan kosong atau tidaknya suatu Queue.6.

false jika antrian tidak kosong} Deklarasi Deskripsi return ((Head(Q) = Nil) and (Tail(Q) = Nil)) Halaman 98 . jika antrian kosong.function IsQEmpty (Q : Queue) → Boolean { TEST Queue kosong : Mengirim true.

Akhir : sebuah queue Q yang kosong terbentuk Proses : Membuat queue kosong } Deklarasi Deskripsi Head(Q) ← Nil Tail(Q) ← Nil Halaman 99 . K. Awal : sembarang. Pembuatan Queue kosong Membuat Queue kosong diperlukan untuk memulai memakai Queue.b. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi Queue sebagai berikut : Procedure CreateEmptyQ (Output Q : Queue) {K.

yaitu hanya InsertLast. Berikut ini akan diberikan skema prosedur penyisipan tersebut.c. Halaman 100 .Penambahan sebuah elemen pada Queue Penambahan selalu dilakukan pada ekor. dan karena alamat ekor diketahui maka prosesnya sederhana.

Halaman 101 .Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur yang melakukan penambahan elemen Queue sebagai berikut : Prosedur pertama menambahkan suatu Elemen Queue yang diketahui alamatnya dan yang kedua menambahkan suatu nilai Elemen queue yang diberikan.

Awal : Queue mungkin kosong.Akhir : P menjadi elemen Tail dari Q dan Tail yang baru adalah P Proses : Insert sebuah elemen beralamat P pada Tail dari antrian Q } Deklarasi Halaman 102 . Next (P) = Nil K. P terdefinisi (berarti terdefinisi informasinya.procedure InsertQ@ (Input/Output Q : Queue Input P : address) {K.

Deskripsi If IsQEmpty(Q) then Head(Q) ← P Tail(Q) ← P else Next(Tail(Q)) ← P Tail(Q) ← P endif Halaman 103 .

Awal : Queue mungkin kosong.procedure InsertQ(Input/Output Q : Queue Input E : InfoType) {K. E terdefinisi K.Akhir : Elemen Tail dari Q yang baru bernilai E Proses : Insert sebuah elemen nilai pada Tail dari antrian Q } Deklarasi Halaman 104 .

Deskripsi Alokasi (P) Info (P) ← E If IsQEmpty(Q) then Head(Q) ← P Tail(Q) ← P else Next(Tail(Q)) ← P Tail(Q) ← P endif Halaman 105 .

Jika akibat penghapusan queue tidak kosong. Halaman 106 . maka harga Tail harus diganti. Jika queue menjadi kosong.d. Penghapusan Elemen Pada QueuE Penghapusan elemen pada queue selalu dilakukan pada elemen pertama. hanya saja perlu diperhitungkan bahwa mungkin queue menjadi kosong akibat terjadinya penghapusan. maka elemen terakhir tidak berubah.

Halaman 107 . Prosedur pertama melakukan penghapusan ElmtQ yang berada di Head danyang dicatat adalah alamatnya.Berikut adalah skema penghapusan tersebut. yaitu P. Prosedur yang kedua menghapus elemen Head dari queue dan menyimpannya pada suatu elmtQ serta membebaskan alamat yang tadinya dipakai oleh elemen Head tersebut.

P ≠ Nil.Awal : Queue tidak kosong K. Next(P) = Nil Proses : Menghapus elemen Head dari antrian.procedure DeleteQ@(Input/Output Q : Queue Output P : address) {K.Akhir : P bukan lagi elemen dari Q. antrian tidak boleh kosong dan mungkin menjadi kosong } Deklarasi Deskripsi Halaman 108 .

P ← Head(Q) Head(Q) ← Next(Head(Q)) if (Head(Q) = Nil) then Tail(Q) ← Nil endif Next(P) ← Nil Halaman 109 .

Next(P) = Nil Proses : Menghapus elemen Head dari antrian. antrian tidak boleh kosong dan mungkin menjadi kosong } Deklarasi Deskripsi Halaman 110 .Akhir : Jika P adalah Head(Q).procedure DeleteQ(Input/Output Q : Queue Output E : InfoType) {K. P bukan lagi elemen dari Q.Awal : Queue tidak kosong K. P ≠ Nil.

P ← Head(Q) E ← Info(Head(Q)) Head(Q) ← Next(Head(Q)) if (Head(Q) = Nil) then Tail(Q) ← Nil endif Next(P) ← Nil Dealokasi(P) Halaman 111 .

Soal-Soal 1. bagaimana jika terpaksa harus menghapus elemen yang paling belakang? Halaman 112 . Mengapa pada Queue Traversal dan Search jarang dilakukan? 3. Mengapa cara penyusunan elemen pada Queue Sering disebut tersusun secara FIFO? 2. Penghapusan elemen pada Queue selalu dilakukan pada elemen yang paling depan.

Buatlah fungsi/prosedur untuk mencetak elemen queue yang genep 6. Buatlah juga fungsi untuk menghitung rata-rata elemen queue yang ganjil 7. Buatlah sebuah fungsi untuk mengirimkan elemen pertama queue 8.4. Buatlah sebuah fungsi untuk menghitung jumlah elemen queue yang ganjil. jika diketahui sebuah queue dengan elemen bertype integer. Buatlah sebuah fungsi untuk mengirimkan elemen queue yang maksimum jika diketahui elemen queue terurut membesar dan bertype integer Halaman 113 . 5.

Halaman 114 .

Elemen yang lain (jika masih ada) dibagibagi menjadi beberapa sub himpunan yang disjoint dan masing-masing sub himpunan tersebut adalah pohon yang disebut sebagai sub pohon dari pohon tersebut.7. Definisi Rekurens Dari Pohon Sebuah pohon adalah himpunan terbatas tidak kosong.1. Sebuah elemen yang dibedakan dari yang lain yang disebut sebagai AKAR (root) dari pohon 2. dengan elemen yang dibedakan sebagai berikut : 1. Pohon (Tree) 7. Halaman 115 .

Cabang Cabang adalah hubungan antara Akar dengan sub pohon Halaman 116 . Simpul (Node) Simpul adalah elemen dari pohon yang memungkinkan akses pada sub pohon dimana simpul tersebut berfungsi sebagai Akar 3. Hutan Hutan adalah sequence (list) dari pohon 2.Beberapa Istilah 1.

Ayah Akar dari sebuah pohon adalah Ayah dari sub pohon 5. Daun Daun adalah simpul terminal dari pohon.4. Anak Anak dari sebuah pohon adalah Sub pohon 6. Saudara Saudara adalah simpul-simpul yang mempunyai Ayah yang sama 7. Semua simpul selain Daun adalah simpul bukan terminal Halaman 117 .

8. Derajat Derajat sebuah pohon adalah banyaknya anak dari dari pohon tersebut. Jika sebuah simpul berderajat N disebut pohon N-aire 1 disebut pohon 1-aire/uner 2 disebut pohon 2-aire/biner Halaman 118 . Jalan (Path) Jalan adalah suatu urutan tertentu dari Cabang 9.

Dua buah simpul disebut sebagai Sepupu jika mempunyai tingkat yang sama dalam sebuah pohon. Akar mempunyai tingkat sama dengan 1. Tingkat (Level) Level pohon adalah panjangnya jalan dari Akar sampai dengan simpul yang bersangkutan. Halaman 119 . Panjang dari jalan adalah banyaknya simpul yang dikandung pada jalan tersebut.10.

Lebar Lebar sebuah Pohon adalah maksimum banyaknya simpul yang ada pada suatu Tingkat (Level) Halaman 120 . Kedalaman (Tinggi) Kedalaman (Tinggi) dari pohon adalah nilai maksimum dari tingkat simpul yang ada pada pohon tersebut. Kedalaman adalah panjang maksimum jalan dari Akar menuju ke sebuah daun 12.11.

Halaman 121 . Struktur Pohon Biner Definisi Sebuah pohon biner (Binary Tree) adalah himpunan terbatas yang : Mungkin kosong atau Terdiri dari sebuah simpul yang disebut sebagai Akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner yang disebut sebagai Sub Pohon Kiri (Left) dan Sub Pohon Kanan (Right) dari pohon biner tersebut.7.2.

Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap simpul paling banyak hanya memiliki dua buah anak.Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai dalam berbagai terapan. dan mungkin tidak punya anak. Halaman 122 . Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum.

Notasi Prefiks, Infiks dan Postfiks 1. Notasi Prefiks Notasi Prefiks ditulis dengan cara mengikuti alur sebagai berikut :

Halaman

123

2. Notasi Infiks Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :

Halaman

124

3. Notasi Posfiks Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :

Halaman

125

Left : address. Right: address > Type BinTree : address {Primitif} Halaman 126 .Rekonstruksi Algoritma {Deklarasi Type} Type Infotype = … {terdefinisi} Type node = record <Info : infotype.

function Akar (P : BinTree)→ infotype {Mengirimkan nilai Akar pohon biner P} function Left (P : BinTree)→ infotype {Mengirimkan anak kiri pohon biner P} function Right (P : BinTree)→ infotype {Mengirimkan anak kanan pohon biner P} Halaman 127 .

function IsEmpty(P : BinTree)→boolean { Test apakah sebuah pohon kosong. Akhir : Terbentuk sebuah pohon biner Proses : Menghasilkan sebuah pohon biner dari Akar. Awal : sembarang K. L : BinTree. output P : BinTree) { K. R : BinTree. L dan R} Halaman 128 . mengirimkan True jika kosong dan False jika tidak} procedure MakeTree(input Akar : infotype.

AWAL : P terdefinisi K.{Traversal} Procedur PreOrder(input P : BinTree) {K. AKHIR : Semua simpul P sudah diproses secara preorder} Procedure InOrder(input P : BinTree) {K. AKHIR : Semua simpul P sudah diproses secara inorder} Halaman 129 . AWAL : P terdefinisi K.

h : integer) {K. AKHIR : Semua simpul P sudah ditulis dengan indentasi} Halaman 130 . AWAL : P terdefinisi. AWAL : P terdefinisi K.Procedure PostOrder(input P : BinTree) {K. h adalah jarak indentasi K. AKHIR : Semua simpul P sudah diproses secara postorder} Procedure PrintTree(input P : BinTree.

false jika tidak} {fungsi lain} function NbElmt(P : BinTree)→integer {Mengirimkan banyaknya elemen (node) pohon biner P} Halaman 131 . X : infotype)→boolean {Mengirimkan True jika ada node P bernilai X.{Search} function Search(P : BinTree.

function NbDaun(P : BinTree) →integer { Mengirimkan banyaknya daun pohon biner P} function IsUnerLeft(P : BinTree) →boolean { Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerleft yaitu hanya mempunyai sub pohon kiri} function IsUnerRight(P : BinTree) →boolean { Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerright yaitu hanya mempunyai sub pohon kanan} Halaman 132 .

function IsBin(P : BinTree)→boolean { Mengirimkan True jika pohon biner tidak kosong P adalah pohon biner yaitu mempunyai sub pohon kanan dan sub pohon kiri} function IsSkewLeft(P : BinTree)→boolean { Mengirimkan True jika pohon biner P adalah pohon condong kiri} function IsSkewRight(P : BinTree)→boolean { Mengirimkan True jika pohon biner P adalah pohon condong kanan} Halaman 133 .

function Tinggi(P : BinTree)→integer { Mengirimkan tinggi dari pohon biner P} function Level(P : BinTree. X : infotype)→integer { Mengirimkan level dari node X yang merupakan salah satu simpul dari pohon biner P} {Operasi Lain} Halaman 134 .

X adalah salah satu daun pohon Biner P K. AWAL : P boleh kosong K. input X. AKHIR : P bertambah simpulnya. AWAL : P tidak boleh kosong.Procedure AddDaunTerkiri(input/output P:BinTree. input X: infotype) {K. Y : infotype. dengan X adalah simpul daun terkiri} Procedure AddDaun(input/output P:BinTree. AKHIR : P bertambah simpulnya. input Kiri : boolean) {K. dengan Y adalah anak kiri X (jika kiri) atau sebagai anak kanan X (jika not kiri)} Halaman 135 .

Procedure DelDaunTerkiri(input/output P:BinTree. AKHIR : X dihapus dari P} Halaman 136 . output X: infotype) {K. dengan X adalah info yang semula disimpan pada daun terkiri yang dihapus} Procedure DelDaun(input/output P:BinTree. AKHIR: P dihapus daun terkirinya dan didealokasi. X adalah salah satu daun K. AWAL : P tidak kosong K. output X: infotype) {K. AWAL : P tidak kosong.

You're Reading a Free Preview

Mengunduh
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->