P. 1
Pengertian Struktur Data

Pengertian Struktur Data

|Views: 229|Likes:
Dipublikasikan oleh Ang

More info:

Published by: Ang on Aug 06, 2011
Hak Cipta:Attribution Non-commercial

Availability:

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

06/17/2015

pdf

text

original

PENGERTIAN STRUKTUR DATA Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa

dipakai secara efisien Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol Secara garis besar type data dapat dikategorikan menjadi : 1. Type data sederhana a. Type data sederhana tunggal, misalnya Integer, real, boolean dan karakter b. Type data sederhana majemuk, misalnya String 2. Struktur Data, meliputi a. Struktur data sederhana, misalnya array dan record b. Struktur data majemuk, 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, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana. 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 ) REVIEW RECORD (REKAMAN) Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram. Rekaman disebut juga tipe terstruktur. Contoh : 1. type Titik : record <x : real, y : real> jika P dideklarasikan sebagai Titik maka mengacu field pada P adalah P.x dan P.y. 2. Didefinisikan tipe terstruktur yang mewakili Jam yang dinyatakan sebagai jam (hh), menit (mm) dan detik (ss), maka cara menulis type Jam adalah : type JAM : record <hh : integer, {0…23} mm : integer, {0…59} ss : integer {0…59} > Jika J adalah peubah (variabel) bertipe Jam maka cara mengacu tiap field adalah J.hh, J.mm dan J.ss

Terjemahan dalam bahasa C : 1. type Titik : record <x : real, y : real> diterjemahkan menjadi : typedef struct { float x; float y; } Titik; 2. type JAM : record <hh : integer, {0…23} mm : integer, {0…59} ss : integer {0…59} > Diterjemahkan menjadi : typedef struct { int hh; /*0…23*/ int mm; /*0…59*/ int ss; /*0…59*/ } Jam; REVIEW ARRAY (LARIK) 1. Pendahuluan • Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe sama. • Setiap elemen diakses langsung melalui indeksnya. • Indeks larik harus tipe data yang menyatakan keterurutan misalnya integer atau karakter. • Banyaknya elemen larik harus sudah diketahui sebelum program dieksekusi. • Tipe elemen larik dapat berupa tipe sederhana, tipe terstruktur atau tipe larik lain. • Nama lain array adalah Larik, tabel atau vektor Cara Pendefinisian Array 1. Sebagai Peubah Contoh : L : array[1..50] of integer NamaMhs : array[‘a’..’j’] of string 2. Sebagai tipe baru Contoh : type LarikInt : array[1..100] of integer P : LarikInt 3. Mendefinisikan ukuran maksimum elemen larik sebagai konstanta Contoh : Const Nmaks = 100 type Larikint : array[1..Nmaks] of integer P : LarikInt Cara menterjemahkan ke bahasa C : #define Nmaks 100 typedef int Larikint[Nmaks+1]; Larikint P;

tapi dapat juga berisi data yang bertipe terstruktur Contoh : const Nmaks = 100 type Mahasiswa : record <nim : integer.Cara Mengacu Elemen Larik • Elemen larik diacu melalui indeksnya. Awal : N adalah banyak elemen efektif larik. Nilai : char > TabMhs : array[1. • 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. asalkan nilai k sudah terdefinisi } Menginisialisasi Larik menginisialisasi elemen larik adalah memberikan harga awal untuk seluruh elemen larik.. nilainya terdefinisi} {K. Awal : N adalah jumlah elemen efektif larik. input N:integer) {menginisialisasi setiap elemen larik A[1. input N:integer) {mengisi elemen larik A[1.Nmaks] of Mahasiswa . nama_mhs : string. Akhir : seluruh elemen larik A bernilai nol} Deklarasi : K : integer Deskripsi : for k  1 to N do A[k]  0 endfor 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.N] dengan nol} {K. 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 Larik Bertype Terstruktur Larik tidak hanya dapat berisi data bertype tunggal.. nilainya terdefinisi} {K. KodeMK : string.. misalnya menginisialisasi dengan nilai 0 seperti di bawah ini : Procedure InisDgn0(output A:larik.N] dengan nilai yang dibaca dari piranti masukan} {K. Nilai indek harus terdefinisi.

misalnya menjadi record dalam Pascal/Ada dan Struct dalam bahasa C Primitif dalam konteks pemrograman prosedural. 8. Definisi List linier adalah sekumpulan elemen bertype sama. yaitu untuk menghancurkan nilai objek. berupa kode program dalam bahasa yang bersangkutan. diterjemahkan menjadi fungsi dan prosedur. Next adalah address dari elemen berikutnya ( suksesor ). sama dengan dan sebagainya. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan Selektor dan Konstruktor 4. 3. range. Aritmatika terhadap type tersebut. Selektor. dan pre kondisi jika ada b. Konversi dari type tersebut ke type dasar dan sebaliknya ADT biasanya diimplementasi menjadi dua buah modul. 2.Spesifikasi type sesuai dengan bahasa yang dipakai . Biasanya namanya diawali dengan Get. Write(TabMhs[k]. Validator komponen type. TabMhs[2]. Baca/tulis. Prosedur Pengubah nilai komponen 4. Destruktor/Dealokator. lebih kecil. Biasanya namanya diawali dengan Make. Keadaan Akhir dan proses yang dilakukan 2. Body/realisasi dari primitif. Linked List (List Linier) 4. yang setiap elemennya terdiri dari 2 bagian : Type Elmtlist = record < Info : InfoType. • Type diterjemahkan menjadi type terdefinisi dalam bahasa pemrograman yang bersangkutan. Operator Relasional terhadap type tersebut untuk mendefinisikan lebih besar.KodeMK) menuliskan field KodeMK dari elemen ke k dari larik ADT (Abstract Data Type) • ADT adalah definisi type dan sekumpulan primitif (operasi dasar) terhadap type tersebut. dalam pemrograman biasanya hanya terdefinisi untuk bilangan numerik. sekaligus memori penyimpannya 6. Primitif dikelompokkan menjadi : 1. maka elemen berikutnya dapat diakses secara suksesif dari elemen pertama tersebut . Dengan demikian. Next : address > Dengan Info Type adalah sebuah type terdefenisi yang menyimpan informasi sebuah elemen list . Prosedur : Keadaan Awal.Nim mengacu field Nim dari elemen kedualarik 2. pembentuk nilai type. Fungsi : nama. yaitu : a. yang dipakai untuk mengetes apakah dapat membentuk type sesuai batasan. domain. untuk interface dengan input/output device 7.1. jika didefinisikan First adalah alamt elemen pertama list.Contoh Cara mengacu elemen TabMhs : 1. yang mempunyai keterurutan tertentu. Definisi/spesifikasi type dan primitif .Spesifikasi dari primitif sesuai dengan kaidah dalam konteks prosedural. untuk mengakses komponen type. yaitu : 1. Konstruktor/Kreator. 5.

Ada berbagai cara untuk mengenali elemen akhir Jika L adalah list . Akhir : semua elemen list L dikunjungi dan telahdiproses } {Proses : Traversal sebuah list linier. Karena Urutan akses adalah dari elemen pertama sampai dengan elemen terakhir. mungkin kosong } . Karena itu salah primitif operasi konsultasi dasar pada struktur list adalah traversal. yaitu “mengunjungi” setiap elemen list untuk diproses. biasanya melalui alamat elemen pertama yang disebut : First • alamat elemen berikutnya ( suksesor ). Elemen terakhir dikenali. Skema traversal untuk list linier List terdiri dari sekumpulan elemen. Dengan MARK. dan seterusnya sampai dengan elemen terakhir.Jadi. typeterdefenisi } Deskripsi : Inisialisasi P ← First ( L ) { First Element } While ( P ≠Nil ) do Proses ( P ) P ← Next ( P ) { Next element } endwhile Terminasi Procedure SKEMAListTransversal 2( Input L : List ) { K. dengan salah satucara adalah karena Next(Last) =Nil II. yang dapat diakses melalui field NEXT • setiap elemen mempunyai alamat. alamat harus terdefenisi . List L adalah List kosong . yaitu tempat elemen disimpan dapat diacu. sebuah list linier dikenali : • elemen pertamanya. Awal : List L terdefinisi . Awal : List L terdefenisi . Skema traversal yang dipakai adalah Sbb : Procedure SKEMAListTransversal1( Input L : List ) {K. Seringkali diperlukan untuk memproses setiap elemen list dengan cara yang sama. Dengan alamat tersebut Informasi yang tersimpan pada elemen list dapat diakses • elemen terakhirnya. maka traversal list secara natural dilakukan dari elemen pertama. mungkin kosong } {K. tanpa pemrosesan khusus pada list kosong} Deklarasi Deklarasi : P : address { address untuk traversal . Untuk mengacu sebuah elemen . suksesornya. 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) Beberapa defenisi : 1. jika kita mengetahui alamat sebuah elemen . jika First (L) = Nil 2.

Output P : address. versi dengan Boolean} Deklarasi Deskripsi 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} . dimana X diketemukan. Dengan MARK dan pemrosesan khusus pada list kosong } Deklarasi : Deklarasi P : address { address untuk traversal . Biasanya dengan alamat yang ditemukan. Procedure SKEMAListSearch1 ( Input L : List. Semua elemen diperiksa dengan intruksi yang sama. Found: Boolean ) { K. Akhir : semua elemen list L “dikunjungan “ dan telah diproses } { Proses : Transversal sebuah list linier yang diidentifikasi oleh elemen pertama L . atau berdasarkan alamat. Search suatu Nilai.{ K. X terdefenisi } { K. Found berharga true jika harga X yang dicari ketemu. output adalah address Search ini sering dipakai untuk mengenali suatu elemen list berdasarkan nilai informasi yang disimpan pada elemen yang dicari. III. Pencarian dapat berdasarkan nilai.Akhir : P : address pada pencarian beurutan. P = Nil jika tidak ketemu.1. akan dilakukan suatu proses terhadap elemen list tersebut. Awal : List linier L sudah terdefinisi dan siap dikonsultasi. false jika tidak } {Proses : Sequential Search harga X pada sebuah list linier L. type terdefenisi } Deskripsi If (First ( L ) = Nil) then Write ( ‘List kosong ‘ ) else Insialisasi P ← First ( L ) { First Element } Repeat Proses ( P ) P ← Next ( P ) { Next element } until P=Nil Terminasi III. Skema Sequential Search untuk list linier Selain traversal. proses pencarian suatu elemen list adalah primitif yang sering kali didefinisikan pada struktur list. X : InfoType.

Semua elemen diperiksa dengan intruksi yang sama } 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} IV. Operasi pada list kosong sering kali membutuhkan penanganan khusus Realisasi algoritmik dari definisi fungsional ini adalah sebuah fungsi sebagai berikut. Found berharga true. Function IsEmptyList (L : List ) → boolean { Test apakah sebuah list L kosong. yang selanjutnya siap diproses (ditambah elemennya. maka operasi yang dapat dilakukan : ListEmpty. Definisi fungsional list linier dan algoritmanya Secara fungsional. X terdefenisi } {K. Insert. 1. Realisasi algoritmik dari defenisi funfsional ini adalah sebuah prosedur sebagai berikut. penambahan atau penghapusan elemen yang dapat ditulis sebagai berkut : Jika diberikan L. P : address. pada sebuah list linier biasanya dilakukan pembuatan. CreateList. L1 dan L2 adalah list linier dengan elemen ElmtList. Concat dan UpdateList IV. Found berharga false } {Proses : Sequential Search @ P pada sebuah list linier L. 2. Jika tidak ada elemen list beralamat P. Search suatu Elemen yang beralamat tertentu Procedure SKEMAList Search@( Input L : List. karena Keadaan Awal dan Keadaan Akhir beberapa prosedur harus didefinisikan berdasarkan keadaan list. Found: Boolean ) {K. .Akhir : Jika ada elemen list beralamat P. false jika tidak kosong} Deklarasi Deskripsi return(First (L) = Nil) IV. dsb).{Jika Found maka P adalah address dimana harga yang dicari diketemukan} III. Delete. Awal : List linier L sudah terdefinisi dan siap dikonsultasi. Mengirimkan true jika list kosong. Pengetesan List Kosong Pemeriksaan apakah sebuah list kosong sangat penting.2 Pembuatan sebuah elemen pada list linier Pembuatan sebuah list berarti membuat sebuat list KOSONG.

IV.2. Awal : List L mungkin kosong } { K. Akhir : terbentuk list L yang kosong : First (L) diinisialisasi dengan NIL ) Proses : Membuat list kosong} Deklarasi Deskripsi First (L) ← Nil IV. INSERT-AFTER Menyisipkan sebuah elemen beralamat P sebagai suksesor dari sebuah elemen list linier yang beralamat Prec Procedure InsertAfter ( Input P. Awal : Sembarang } K. Input P: address) {K. Awal : List L mungkin kosong {K. Awal : Prec adalah elemen list. 3 Penyisipan sebuah elemen pada list linier Fungsi insert (penyisipan) harus dijabarkan lebih rinci. karena dapat menjadi penyisipan sebagai elemen pertama. prec ≠ Nil.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 IV. 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 IV. P ≠ Nil. jika alokasi berhasil. 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 ).Procedure CreateList( Output L : List ) {K. Procedure InsertFirst (Input/Output L:List. Akhir : Sebuah elemen dialokasikan dan menjadi elemen pertama list L.1. Prec: address ) {K. P sudah dialokasikan. Next (P) = Nil . Input E : infotype ) { K. INSERT-First (Address) Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list.2. Procedure InsFirst (Input/output L :List. atau sebuah elemen yang hanya diketahui nilai Info-nya (berarti belum dialokasi).2.

insert P after last } InsertAfter (P. Last) endif Procedure InsertLast(Input/output L :List. Awal : List L mungkin kosong. Akhir : P adalah elemen terakhir list L Proses : Insert sebuah elemen beralamat P sbg elemen terakhir dari list linier L yg mungkin kosong } Deklarasi Last : address { address untuk traversal} Deskripsi If Fisrt (L) = Nil then { insert sebagai elemen pertama} InsertFirst(L. Input P : address) {K. P) Else { Traversal list sampai address terakhir} Last ← First (L) While (Next (Last ) ≠ Nil ) do Last ← Next (Last ) endwhile {Next ( Last) = Nil. setelah sebuah address P atau penghapusan elemen terakhir. P ≠ Nil. P ≠ Nil. Ada dua kemungkinan list kosong atau tidak kosong Procedur InsertLast@(Input/Output L: 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 IV. P sudah dialokasi. 2.3. P sudah dialokasi. Last adalah elemen terakhir. Next(P)=Nil K. .P) IV. 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. Input E : Infotype) { K.3. INSERT – Last Menyisipkan sebuah elemen beralamat P sebagai elemen terakhir sebuah list linier. Perbedaan ini melehirkan 3 operasi dasar penghapusan elemen list yang diturunkan dari definisi fungsional inimenjadi realisasi algoritma. Awal : List L mungkin kosong. Karena penghapusan elemen dapat merupakan pertama. Penghapusan sebuah elemen pada listlinier Penghapusan harus dijabarkan lebih rinci.K.

Akhir : menghapus elemen pertama L P adalah @ elemen pertama L sebelum penghapusan. Prec adalah elemen list.3. Akhir : menghapus elemen pertama L E adalah Nilai elemen pertama L sebelum penghapusan.Operasi penghapusan dapat mengakibatkan list kosong. yaitu alamat Prec memakai DeleteAfter (Prec) Procedure DeleteP ( Input/Output L .2. Next (Prec) ≠ Nil } Prec ≠elemen terakhir K. List.1. Delete After : Penghapusan suksesor sebuah elemen : Procedure DeleteAfter ( Input Prec : adrress. Output P : address ) { K. minimal 1 elemen pertama pasti ada } {K. maka penghapusan sebuah beralamat P dapat dilakukan dengan : mencari predesesor dari P. Awal : List tidak kosong. “tengah” atau terakhir } Deklarasi Prec : address { alamat predesesor } . Output P : address) {K. Next (Prec) yang baru adalah suksesor dari suksesor Prec sebelum penghapusan } Deklarasi Deskripsi P ← Next (Prec) Next (Prec) ← Next (Next (Prec)) Dengan primitip ini. jika list semula hanya terdiri dari satu elemen. Awal : List L tidak kosong. 3. Akhir : Menghapus P dari list. Awal : List L tidak kosong. minimal 1 elemenpertama pasti ada } {K. IV. P adalah elemen list L K. P adalah @ suksesor Prec sebelum penghapusan. Output P : address ) { K. Output E : InfoType) {K. P mungkin elemen pertama. DELETFirst : menghapus elemen pertama list linier a. L yang baru adalah Next (L) Deklarasi Deskripsi P ← First (L) First (L) ← Next ( First (L) ) Procedure DeleteFirst (Input/Output L : List. Awal : List L tidak kosong . L yang baru adalah Next (L) Deklarasi Deskripsi P ← First (L) E ← Info (P) First (L) ← Next ( First (L) ) Dealokasi (P) IV. Elemen yang dihapus dicatat alamatnya Procedure DeleteFirst@ (Input/Output L : List. Akhir : Menghapus suksesor Prec.

P) endif IV. 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 . L1. list mungkin menjadi kosong Proses : P adalah alamat elemen terakhir list sebelum penghapusan } Deklarasi Last . Dalam contoh berikut list kedua disambungkan ke list pertama. Akhir : menghapus elemen terakhir dari list. L2 mungkin kosong K. L2 : List.P) else Prec ← First (L) While (Next(Prec) ≠ P ) do Prec ← Next (Prec) endwhile { Next (Prec) = P . 3. Konkatenasi dua buah list linier Concat adalah menggabungkan dua list. Output P : address) {K. Ada dua kasus. Last ← Next ( last ) endwhile { Next ( Last ) = Nil. Realisasi algoritma adalah sebuah prosedur sebagai berikut : Procedure CONCAT (Input L1. preclast = sebelum last } P ← Last If Preclast = Nil then { list dg 1 elemen. awal : L1 ≠ L2. L1 ≠ L3.satunya elemen list linier. Last adalah elemen terakhir. Procedure DeleteLast (Input L : List. DELETELast : Menghapus elemen terakhir list dapat dilakukan jika alamat dari elemen sebelum elemen terakhir diketahui.dan L3 ≠ L2.3. jadi kosong } First(L) ← Nil Else Next ( preclast )← Nil endif IV. Output : L3 : List ) {K.Deskripsi { Cari predesesor P } if (P = First (L) then {Delete list dengan satu elemen } DeleteFirst (L. yaitu list menjadi kosong atau tidak. Akhir : L3 adalah hasil konkatenasi (menyambung) dua buah list linier. Jadi Last (L1) menjadi predesesor First (L2). Persoalan selanjutnya menjadi persoalan DeleteAfter. minimal mengandung 1 elemen K. kalau last bukan satu. hapus P } DeleteAfter (Prec . 5. L2 ditaruh dibelakang L1 } . Awal : List L tidak kosong.

Deklarasi Last1 : address { alamat elemen terakhir list pertama } Deskripsi Cratelist (L3) {inisialisasilist hasil } If Fist (L1) = Nil then First (L3) ← First (L2) Else { Traversal list 1 sampai address terakhir. Next : address > dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap elemen stack. dan address adalah “alamat” dari elemen Selain itu alamat elemen terbaru (TOP) dicatat. sebuah STACK dapat digambarkan sebagai list linier yang setiap elemennya adalah Type ElmtS = record <Info : InfoType. Dikenali elemen puncaknya (TOP) 2. TOP adalah satu-satunya alamat tempat terjadi operasi. sedangkan alamat elemen yang paling “bawah”. Maka secara lojik. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus. yaitu yang paling lama biasanya diebut BOTTOM. Aturan penyisipan dan penghapusan elemennya tertentu : -Penyisipan selalu dilakukan “di atas “ TOP -Penghapusan selalu dilakukan pada TOP Karena aturan penyisipan dan penghapusan semacam itu. . Next : Address > type List = record <First : Address > {Deklarasi Nama Peubah} L : List P : Address 5. 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 Bagian Deklarasi dari algoritma pada List Linier : Deklarasi type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtL type ElmtL = record <Info : InfoType.Dikatakan bahwa elemen Stack akan tersusun secara LIFO (Last In First Out).1. Stack (Tumpukan) 5. Definisi STACK (Tumpukan) adalah list linier yang : 1.

5. Next : Address > type Stack = record <TOP : Address> {Deklarasi Nama Peubah} S : Stack P : Address 5. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Stack sebagai berikut : function StackEmpty (S : STACK) → Boolean { TEST stack kosong : Mengirim true. Namun dibutuhkan traversal misalnya untuk mencetak isi Stack. sebab semua operasi akan dilakukan berdasarkan kosong atau tidaknya suatu Stack. Pembuatan STACK kosong Membuat Stack kosong diperlukan untuk memulai memakai stack. Search pada Stack Pada stack. supaya penambahan dan penghapusan dengan mudah dan efisien dapat dilakukan.TOP adalah elemen pertama list. jika tumpukan kosong. a.4. dimana operasi penyisipan/penghapusan dilakukan. Awal : sembarang.2. Traversal pada Stack Pada stack. false jika tumpukan tidak kosong} Deklarasi Deskripsi return (Top (S) = Nil) b. Operasi dan fungsi dasar pada STACK. . 5. jarang sekali dilakukan traversal. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi stack sebagai berikut Procedure CreateEmptyS (Output S : STACK) {K.3. dan P adalah address maka Top (S) adalah alamat elemen TOP. Test STACK kosong Mengetahui bahwa stack kosong atau tidak sangat penting. Sehingga jika S adalah sebuah Stack. elemen yang diproses hanyalah elemen pada TOP. Maka hampir tidak pernah dilakukan search. 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 ) Bagian Deklarasi dari algoritma pada Stack : Deklarasi type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtS type ElmtS = record <Info : InfoType. karena keunikan Stack justru pada operasi yang hanya menyangkut elemen TOP.

dan karena alamat TOP diketahui maka prosesnya sederhana. Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur yang melakukan penambahan elemen stack sebagai berikut. Prosedur pertama menambahkan suatu ElmtS yang diketahui alamatnya dan yang kedua menambahkan suatu nilai ElmtS yang diberikan.Awal : Stack mungkin kosong. P terdefinisi (berarti terdefinisi informasinya. alokasi alamat selalu berhasil } { K. Realisasi algoritma dari definisi funsional ini adalah salah satu dari dua buah prosedur yang melakukan pengambilan elemen stack sebagai berikut .Akhir : Top (S) adalah P} Deklarasi Deskripsi { insert sebagai elemen pertama } Next (P) ← TOP (S) TOP (S) ← P procedure Push( Input / Output S:STACK Input E: InfoType ) { Menambahkan sebuah elemen baru pada TOP sebuah stack. Berikut ini akan diberikan skema prosedur penyisipan tersebut.K. dan membebaskan alamat ( dealokasi ) yang tadinya dipakai . maka harga TOP harus diganti .Penambahan sebuah elemen pada STACK (Push) Penambahan selalu dilakukan pada TOP. 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 d. Prosedur pertama mengambil suatu Elmts dengan menyimpan alamatnya dan yang kedua mengambil nilai . Jika Stack menjadi kosong . E terdefenisi . 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 . Next (P) = Nil} {K. Akhir : sebuah stack S yang kosong siap dipakaiterdefinisi Proses : Membuat stack kosong } Deklarasi Deskripsi Top (S) ← Nil c. dengan elemen yang diketahui informasinya } { K. procedure Push@ (Input/Output S : STACK Input P : address) {Menambahkan sebuah elemen baru pada TOP sebuah stack. dengan elemen yang diketahui alamatnya} {K. Awal : Stack mungkin kosong .

Satu elemen dengan elemen lain dapat diakses melalui informasi Next Struktur data ini banyak dipakai dalam informatika misalnya untuk merepresentasi : 1. dan address adalah “alamat” dari elemen Selain itu alamat elemen Pertama (Head) dan elemen terakhir (Tail) dicatat. Aturan penyisipan dan penghapusan elemennya disefinisikan sebagai berikut : . stack tidak boleh kosong dan mungkin menjadi kosong } Deklarasi Deskripsi P ← TOP (S) TOP (S) ← Next(TOP(S)) procedure PopStack(Input/Output S : STACK Output E : InfoType) {K.Awal : Stack tidak kosong K. Maka jika Q adalah Queue dan P adalah Address.Awal : Stack tidak kosong K. sebuah Queue dapat digambarkan sebagai list linier yang setiap elemennya adalah : Type ElmtQ = record <Info : InfoType.Akhir : Alamat elemen Top (S) disimpan pada P. penulisan untuk Queue adalah : Head(Q) Tail(Q) Next(P) Info(P) . Antrian dalam dunia nyata Maka secara lojik. Definisi Queue (Antrian) adalah list linier yang : 1.Penghapusan selalu dilakukan pada elemen pertama 3.Penyisipan selalu dilakukan setelah elemen terakhir .1. alamat TOP yang lama didealokasi Proses : Menghapus elemen stack. 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) 6. Queue (Antrian) 6.Akhir : Alamat elemen Top (S) disimpan pada E.procedure PopStack@(Input/Output S : STACK Output P : address) {K. sehingga informasinya dapat diakses melalui P Proses : Menghapus elemen stack. Antrian job dalam sistem operasi 2. Next : address > dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap elemen queue. Dikenali elemen pertama (Head) dan elemen terakhirnya (Tail) 2.

Bagian Deklarasi dari algoritma pada Queue : Deklarasi type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtQ type ElmtQ = record <Info : InfoType. jika antrian kosong. Tail : Address> {Deklarasi Nama Peubah} Q : Queue P : Address 6. Pembuatan Queue kosong Membuat Queue kosong diperlukan untuk memulai memakai Queue. 6. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Queue sebagai berikut : function IsQEmpty (Q : Queue) → Boolean { TEST Queue kosong : Mengirim true. false jika antrian tidak kosong} Deklarasi Deskripsi return ((Head(Q) = Nil) and (Tail(Q) = Nil)) b. Traversal pada Queue Pada queue. 6. elemen yang diproses hanyalah elemen pada pertama dan terakhir. jarang sekali dilakukan traversal.3. Akhir : sebuah queue Q yang kosong terbentuk Proses : Membuat queue kosong } Deklarasi Deskripsi Head(Q) ← Nil Tail(Q) ← Nil c.2. sebab semua operasi akan dilakukan berdasarkan kosong atau tidaknya suatu Queue.4. . Test Queue kosong Mengetahui bahwa Queue kosong atau tidak sangat penting. Maka hampir tidak pernah dilakukan search.Penambahan sebuah elemen pada Queue Penambahan selalu dilakukan pada ekor. Berikut ini akan diberikan skema prosedur penyisipan tersebut. yaitu hanya InsertLast. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang melakukan inisialisasi Queue sebagai berikut : Procedure CreateEmptyQ (Output Q : Queue) {K. Awal : sembarang. Operasi dan fungsi dasar pada Queue. dan karena alamat ekor diketahui maka prosesnya sederhana. a. K. Search pada Queue Pada Queue. karena keunikan Queue justru pada operasi yang hanya menyangkut elemen pertama dan terakhir. Namun dibutuhkan traversal misalnya untuk mencetak isi Antrian. Next : Address > type Queue = record <Head : Address.

Jika akibat penghapusan queue tidak kosong. procedure InsertQ@ (Input/Output Q : Queue Input P : address) {K.Akhir : Elemen Tail dari Q yang baru bernilai E Proses : Insert sebuah elemen nilai pada Tail dari antrian Q } Deklarasi 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 d. Berikut adalah skema penghapusan tersebut. maka elemen terakhir tidak berubah. Penghapusan Elemen Pada QueuE Penghapusan elemen pada queue selalu dilakukan pada elemen pertama. Jika queue menjadi kosong. E terdefinisi K.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 Deskripsi If IsQEmpty(Q) then Head(Q) ← P Tail(Q) ← P else Next(Tail(Q)) ← P Tail(Q) ← P endif procedure InsertQ(Input/Output Q : Queue Input E : InfoType) {K. Prosedur yang kedua menghapus elemen Head dari queue dan menyimpannya pada suatu elmtQ serta membebaskan alamat yang tadinya dipakai oleh elemen Head tersebut. P terdefinisi (berarti terdefinisi informasinya. .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. Next (P) = Nil K. maka harga Tail harus diganti. hanya saja perlu diperhitungkan bahwa mungkin queue menjadi kosong akibat terjadinya penghapusan.Awal : Queue mungkin kosong. yaitu P. Prosedur pertama melakukan penghapusan ElmtQ yang berada di Head danyang dicatat adalah alamatnya.

Akhir : P bukan lagi elemen dari Q. P ≠ Nil. Next(P) = Nil Proses : Menghapus elemen Head dari antrian. antrian tidak boleh kosong dan mungkin menjadi kosong } Deklarasi Deskripsi 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) 7. Pohon (Tree) 7. Hutan Hutan adalah sequence (list) dari pohon 2. Next(P) = Nil Proses : Menghapus elemen Head dari antrian. 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.Awal : Queue tidak kosong K. Simpul (Node) Simpul adalah elemen dari pohon yang memungkinkan akses pada sub pohon dimana simpul tersebut berfungsi sebagai Akar . Sebuah elemen yang dibedakan dari yang lain yang disebut sebagai AKAR (root) dari pohon 2.procedure DeleteQ@(Input/Output Q : Queue Output P : address) {K.Awal : Queue tidak kosong K. Definisi Rekurens Dari Pohon Sebuah pohon adalah himpunan terbatas tidak kosong. P bukan lagi elemen dari Q. dengan elemen yang dibedakan sebagai berikut : 1. antrian tidak boleh kosong dan mungkin menjadi kosong } Deklarasi Deskripsi P ← Head(Q) Head(Q) ← Next(Head(Q)) if (Head(Q) = Nil) then Tail(Q) ← Nil endif Next(P) ← Nil procedure DeleteQ(Input/Output Q : Queue Output E : InfoType) {K. Beberapa Istilah 1.1. P ≠ Nil.Akhir : Jika P adalah Head(Q).

Panjang dari jalan adalah banyaknya simpul yang dikandung pada jalan tersebut. Notasi Prefiks. Ayah Akar dari sebuah pohon adalah Ayah dari sub pohon 5. dan mungkin tidak punya anak. Jika sebuah simpul berderajat N disebut pohon N-aire 1 disebut pohon 1-aire/uner 2 disebut pohon 2-aire/biner 10. Cabang Cabang adalah hubungan antara Akar dengan sub pohon 4. Anak Anak dari sebuah pohon adalah Sub pohon 6. Infiks dan Postfiks 1. Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum. Dua buah simpul disebut sebagai Sepupu jika mempunyai tingkat yang sama dalam sebuah pohon.2. Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap simpul paling banyak hanya memiliki dua buah anak. 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. Akar mempunyai tingkat sama dengan 1. Tingkat (Level) Level pohon adalah panjangnya jalan dari Akar sampai dengan simpul yang bersangkutan.3. 11. Lebar Lebar sebuah Pohon adalah maksimum banyaknya simpul yang ada pada suatu Tingkat (Level) 7. Semua simpul selain Daun adalah simpul bukan terminal 8. Saudara Saudara adalah simpul-simpul yang mempunyai Ayah yang sama 7. 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. Daun Daun adalah simpul terminal dari pohon. Jalan (Path) Jalan adalah suatu urutan tertentu dari Cabang 9. Notasi Prefiks Notasi Prefiks ditulis dengan cara mengikuti alur sebagai berikut : . Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai dalam berbagai terapan. Derajat Derajat sebuah pohon adalah banyaknya anak dari dari pohon tersebut.

Right: address > Type BinTree : address {Primitif} 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} function IsEmpty(P : BinTree)→boolean { Test apakah sebuah pohon kosong. h : integer) {K. Left : address. AWAL : P terdefinisi K. output P : BinTree) { K. AKHIR : Semua simpul P sudah diproses secara postorder} Procedure PrintTree(input P : BinTree. Awal : sembarang K. Notasi Posfiks Notasi ini ditulis dengan cara mengikuti alur sebagai berikut : Rekonstruksi Algoritma {Deklarasi Type} Type Infotype = … {terdefinisi} Type node = record <Info : infotype. AKHIR : Semua simpul P sudah ditulis dengan indentasi} {Search} function Search(P : BinTree. R : BinTree. AKHIR : Semua simpul P sudah diproses secara preorder} Procedure InOrder(input P : BinTree) {K. L : BinTree. AWAL : P terdefinisi. false jika tidak} . AKHIR : Semua simpul P sudahdiproses secara inorder} Procedure PostOrder(input P : BinTree) {K. AWAL : P terdefinisi K. mengirimkan True jika kosong dan False jika tidak} procedure MakeTree(input Akar : infotype. Notasi Infiks Notasi ini ditulis dengan cara mengikuti alur sebagai berikut : 3. X : infotype)→boolean {Mengirimkan True jika ada node P bernilai X. AWAL : P terdefinisi K.2. h adalah jarak indentasi K. L dan R} {Traversal} Procedur PreOrder(input P : BinTree) {K. Akhir: Terbentuk sebuah pohon biner Proses : Menghasilkan sebuah pohon biner dari Akar.

output X: infotype) {K. X adalah salah satu daun pohon Biner P K. AKHIR: P dihapus daun terkirinya dan didealokasi. AWAL : P tidak kosong. dengan Y adalah anak kiri X (jika kiri) atau sebagai anak kanan X (jika not kiri)} Procedure DelDaunTerkiri(input/output P:BinTree. AWAL : P tidak kosong K. AKHIR : X dihapus dari P} . input X. AKHIR : P bertambah simpulnya. dengan X adalah simpul daun terkiri} Procedure AddDaun(input/output P:BinTree. X : infotype)→integer { Mengirimkan level dari node X yang merupakan salah satu simpul dari pohon biner P} {Operasi Lain} Procedure AddDaunTerkiri(input/output P:BinTree.{fungsi lain} function NbElmt(P : BinTree)→integer {Mengirimkan banyaknya elemen (node) pohon biner P} 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} 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} function Tinggi(P : BinTree)→integer { Mengirimkan tinggi dari pohon biner P} function Level(P : BinTree. AWAL : P boleh kosong K. AWAL : P tidak boleh kosong. Y : infotype. dengan X adalah info yang semula disimpan pada daun terkiri yang dihapus} Procedure DelDaun(input/output P:BinTree. AKHIR : P bertambah simpulnya. X adalah salah satudaun K. input Kiri : boolean) {K. output X: infotype) {K. input X: infotype) {K.

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