18040-14-632646876892

download 18040-14-632646876892

of 12

description

imm

Transcript of 18040-14-632646876892

MODUL 14

LIST, STACK DAN QUEUEDefinisi list :

List adalah barisan nol atau lebih elemen yang bertipe sama.

List merupakan struktur yang fleksibel karena dapat tumbuh dan menyusut sesuai kebutuhan dan elemennya dapat diakses, disisipkan atau dihapus pada posisi manapun dalam list.

List dapat juga disambung atau dipecah ke dalam sublist.

List merupakan struktur linear umum tanpa batasan penyisipan dan penghapusan hanya pada salah satu ujung.

Ditinjau dari spektrum struktur data, list merupakan struktur dinamis.

List dirancang tidak hanya menyimpan nilai data, tetapi juga ukuran dan bentuknya, yang dapat berubah pada saat runtime.

Operasi pada sebuah list harus dapat memungkinkan :

menyisipkan elemen pada posisi manapun di dalam list (insert)

menghapus elemen pada posisi manapun (delete)

mengambil elemen pada posisi manapun (retrieve)

mencari elemen tertentu pada list (locate)

bergerak maju dan mundur sepanjang list

Tipe Pointer pada Notasi Algoritma

Tipe pointer untuk notasi algoritma menggunakan symbol .

Nama Tipe : atau pointer

Ranah nilai: alamat sel memori

Tetapan: NIL, yang menunjuk alamat tidak terdefinisi

Operator: operator perbandingan yang menghasilkan nilai Boolean, yaitu = (sama) dan (tidak sama).

Notasi

Misalkan L adalah list dan P adalah variabel bertipe Address. Akses terhadap elemen list melalui alamat dapat dinyatakan sebagai berikut :

1. L.Head, menyatakan alamat elemen pertama list L.

2. P .Info, menyatakan alamat elemen pertama list L

3. P .Next, menyatakan fieldNext dari elemen yang alamatnya P.

Implementasi list dengan pointer

type CellType =integer;

type Address =^Cell;

type Cell : record

Info :CellCtype; (mendefinisikan field-field info)

Next :Address;

end;

{pendefinisian tipe list tergantung kepada bentuk list}

type List = record

Head :Address;

Tail :Address; (artinya list punya head dan tail)

end;

{cara akses jika L adalah List dan P adalah address:

L.Head menjadi L.Head,

P.Info menjadi P.^Info

P.Next menjadi P.^Next,

NIL tetap NIL }

Implementasi list dengan array

DEKLARASI :

const Max=100 {maksimum elemen list}

type CellType = integer

type Address = integer 1..Max {menyatakan alamat}

type Cell = CellType

{pendefinisian tipe list berikut tergantung kepada bentuk list}

type List = record {posisi yang siap diisi}

Implementasi List dengan Cursor

DEKLARASI

const Max=100 {maksimum elemen list}

type CellType = integer

type Address = integer 0..Max {menyatakan alamat}

type Cell = record

{pendefinisian tipe list berikut tergantung kepada bentuk list}

type List = record {posisi yang siap diisi}

{cara akses jika L adalah List dan P adalah address:

L.Head menjadi L.Head,

P.Info menjadi L.TabCell[P].Info

P.Next menjadi L.TabCell[P].Next

NIL menjadi 0 }

STACK

I. IMPLEMENTASI STACK

Stack menerapkan aturan last-in, first-out (LIFO), implementasi alternative stack adalah :

1. List dengan pointer untuk variable-length stack (ukuran stack bervariasi)

2. Array untuk fixed-length stack (ukuran stack sudah dibatasi, tidak dapat tumbuh)

I.1. Stack dengan list

Operasi dasar stack pada list adalah sbb :

create : membuat stack baru yang masih kosong

empty

: mengembalikan true jika stack kosong

push

: menyisipkan elemen baru

pop

: menghapus elemen yang terakhir disisipkan, jika stack tidak kososng

top

: mengambil elemen yang terakhir disisipkan, jika stack tidak kosong

DEKLARASI :

type CellType = integer (tipe sel)

type Address = Cell ( menyatakan alamat)

type Cell = record

type Stack = record

{cara akses jika S adalah Stack dan P adalah address :

S.TOP,

P.Info ,

P.Next dan konstanta NIL}

{operasi-operasi dasar}

procedure create (output S:Stack)

{ create stack,

K.Awal : sembarang

K.Akhir : tercipta stack kosong, top nil

}

function empty (input S:Stack) boolean

{ mengembalikan true jika stack S kosong, top=nil}

procedure push (input/output S:Stack, input x:CellType)

{ menyisipkan elemen baru pada top stack,

K.Awal : stack S dan x sudah terdefinisi,

K.Akhir : S.TOP P, dan x menjadi elemen top stack

}

procedure pop(input/output S:Stack)

{ menghapus elemen terakhir dari top stack,

K.Awal : stack S sudah terdefinisi, S tidak kosong

K.Akhir : S.TOP S.TOP.Next

}

function getTop(input S:Stack) Cell

{ mengembalikan elemen pada top stack }

I.1.1. Push stack dengan list:

procedure push(input/output S:Stack, input x:CellType)

{ menyisipkan elemen baru pada top stack,

K.Awal : stack S dan x sudah terdefinisi, stack tidak penuh

K.Akhir : S.TOP P dan x menjadi elemen top stack

}

DEKLARASI

P:Address

DESKRIPSI :

Alokasi (P) {alokasi memori untuk P}

If P NIL then

p.Info x

p.Next S.TOP {push}

S.TOP P

endif

Stack sebelum dan setelah operasi penyisipan :

TOP

push Y TOP

Sebelum

sesudah

I.1.2. Pop stack dengan list :

procedure pop(input/output S:Stack)

{ menghapus elemen terakhir dari top stack,

K.Awal : stack S sudah terdefinisi, S tidak kosong

K.Akhir : S.TOP S.TOP.Next

}

DEKLARASI

P : Address

DESKRIPSI

P S.TOP

S.TOP S.TOP.Next

DeAlokasi(P)

Stack sebelum dan setelah operasi penghapusan

TOP

TOP

pop

Sebelum

sesudah

I.2. Implementasi Stack dengan Array

Operasi-operasi dasar stack untuk implementasi dengan array adalah sbb :

create : membuat stack baru yang masih kosong

empty : mengembalikan true jika stack kosong

full : mengembalikan true jika stack penuh

push : menyisipkan elemen baru, jika tidak penuh

pop : menghapus elemen yang terakhir disisipkan, jika stack tidak kosong

getTop: mengambil elemen yang terakhir disisipkan, jika tidak kosong

Deklarasi Tipe Stack dengan array

DEKLARASI :

const Max=100 {ukuran stack}

type CellType = integer

type Address = integer 0..Max

type Stack = record