18040-14-632646876892
description
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