• Tidak ada hasil yang ditemukan

List: Pokok Bahasan dan TIK

N/A
N/A
Protected

Academic year: 2021

Membagikan "List: Pokok Bahasan dan TIK"

Copied!
37
0
0

Teks penuh

(1)

B U D I S

(2)

List: Pokok Bahasan dan TIK

Pokok Bahasan

Definisi list, TDA list, implementasi list dengan array, linked list dan doubly linked list

Tujuan Instruksional Khusus

Mahasiswa mampu mengembangkan beberapa algoritma untuk memanipulasi beberapa elemen list (berbasis array, linked list dan doubly linked list) serta dapat menjelaskan efisiensi algoritmanya

(3)

3

Lists

List adalah suatu barisan berhingga dan terurut dari

suatu item data yang disebut elemen

Terurut: setiap elemen mempunyai „posisi‟ tertentu

dalam list, sehingga terdapat elemen pertama,

kedua dan seterusnya

(4)

Elemen List

Setiap elemen mempunyai tipe data

Operasi-operasi yang didefinisikan sebagai bagian

dari TDA list tidak tergantung pada tipe data elemen.

Sebagai contoh, TDA list dapat digunakan untuk list

integer, list karakter, list mahasiswa, list elemen

polinomial dan sebagainya.

(5)

List

Sebuah list dikatakan kosong (empty) jika tidak memuat

elemen.

 Jumlah elemen yang saat ini disimpan disebut panjang

(length) list.

Elemen awal atau pertama disebut kepala (head) dan elemen

terakhir (akhir list) disebut ekor/akhir (tail).

 Berdasarkan keterhubungan antara nilai elemen dan posisi,

list digolongkan menjadi dua macam, yaitu list terurut (ordered list) dan list tak-terurut (unordered list).

 Pada list terurut, elemen-elemen ditempatkan pada suatu

urutan nilai tertentu (naik/turun), sehingga ada keterkaitan antara nilai dan posisi. Sedangkan pada list tak-terurut, tidak ada keterkaitan antara nilai dan posisi.

(6)

List: operasi2

menyisipkan dan menghapus elemen pada posisi

saat ini (posisi curr)

mengakses nilai elemen pada posisi tertentu untuk

membaca dan mengubah

menghapus elemen2 list

mengakses elemen sesudah dan sebelum dari

elemen yang ditunjuk oleh (pada posisi) curr

(7)

7

List ADT

public interface List<E> {

public void clear();

public void insert(E item); public void append(E item); public E remove();

public void moveToStart(); public void moveToEnd(); public void prev();

public void next(); public int length(); public int currPos();

public void moveToPos(int pos); public E getValue();

(8)
(9)
(10)

List ADT: Contoh

List: <12 | 32, 15>

L.insert(99);

Hasil: <12 | 99, 32, 15>

Iterasi pada seluruh elemen list:

for (L.moveToStart(); L.currPos()<L.length(); L.next()) {

it = L.getValue(); doSomething(it);

(11)

List: Implementasi

Dua pendekatan standar yang digunakan untuk

mengimplementasikan list, yaitu:

1. Array atau list kontigu/list sekuensial

2. Linked list (list berkait/berantai)

(12)
(13)

Array-based List

class list array mempunyai data anggota yang terdiri

dari:

 Ukuran maksimum list (maxsize)

 Jumlah elemen yang aktual dalam list (listsize)

 Posisi elemen yang “sedang aktif”/posisi saat ini (curr)  array untuk menyimpan elemen list (listarray)

(14)

Array-Based List Class (1)

class AList<E> implements List<E> {

private static final int defaultSize = 10; private int maxSize;

private int listSize; private int curr;

private E[] listArray; // Constructors

AList() { this(defaultSize); } AList(int size) {

maxSize = size;

listSize = curr = 0;

(15)

15

Array-Based List Class (2)

public void clear()

{ listSize = curr = 0; }

public void moveToStart() { curr = 0; }

public void moveToEnd() { curr = listSize; } public void prev() { if (curr != 0) curr--; } public void next()

{ if (curr < listSize) curr++; }

public int length() { return listSize; } public int currPos() { return curr; }

(16)

Array-Based List Class (3)

public void moveToPos(int pos) {

assert (pos>=0) && (pos<=listSize) : "Position out of range";

curr = pos; }

public E getValue() {

assert (curr >= 0) && (curr < listSize) : "No current element";

return listArray[curr]; }

(17)

17

Insert

// Insert "it" at current position */ public void insert(E it) {

assert listSize < maxSize:

"List capacity exceeded"; for (int i=listSize; i>curr; i--)

listArray[i] = listArray[i-1]; listArray[curr] = it;

listSize++; }

(18)

Append

public void append(E it) { // Append "it" assert listSize < maxSize :

"List capacity exceeded"; listArray[listSize++] = it;

(19)

19

Remove

// Remove and return the current element. public E remove() {

assert (curr >= 0) && (curr < listSize) : "No current element";

E it = listArray[curr];

for(int i=curr; i<listSize-1; i++) listArray[i] = listArray[i+1]; listSize--;

return it; }

(20)

Linked List

Linked list merupakan list berurutan yang mana

antara data/elemen yang satu dengan data/elemen

yang lain dihubungkan dengan sebuah pointer.

Dengan demikian dapat disimpulkan bahwa

elemen masing-masing linked list atau lebih sering

disebut simpul, terdiri dari dua komponen, yaitu

data itu sendiri dan „pointer‟ yang menunjuk ke

simpul berikutnya

(21)

21

Link Class

Dynamic allocation of new list elements.

class Link<E> {

private E element;

private Link<E> next; // Constructors

Link(E it, Link<E> nextval)

{ element = it; next = nextval; }

Link(Link<E> nextval) { next = nextval; } Link<E> next() { return next; }

Link<E> setNext(Link<E> nextval) { return next = nextval; }

E element() { return element; }

E setElement(E it) { return element = it; } }

(22)
(23)

23

(24)

Linked List Class (1)

class LList<E> implements List<E> { private Link<E> head;

private Link<E> tail; protected Link<E> curr; int cnt;

//Constructors

LList(int size) { this(); } LList() {

curr = tail = head = new Link<E>(null); cnt = 0;

(25)

25

Linked List Class (2)

public void clear() {

head.setNext(null);

curr = tail = head = new Link<E>(null); cnt = 0;

}

public void moveToStart() { curr = head; } public void moveToEnd() { curr = tail; } public int length() { return cnt; }

public void next() {

if (curr != tail) { curr = curr.next(); } }

public E getValue() {

assert curr.next() != null : "Nothing to get";

return curr.next().element(); }

(26)
(27)

27

Insert/Append

// Insert "it" at current position public void insert(E it) {

curr.setNext(new Link<E>(it, curr.next())); if (tail == curr) tail = curr.next();

cnt++; }

public void append(E it) {

tail = tail.setNext(new Link<E>(it, null)); cnt++;

(28)
(29)

29

Remove

/** Remove and return current element */ public E remove() {

if (curr.next() == null) return null; E it = curr.next().element();

if (tail == curr.next()) tail = curr; curr.setNext(curr.next().next());

cnt--;

return it; }

(30)

Prev

/** Move curr one step left;

no change if already at front */ public void prev() {

if (curr == head) return; Link<E> temp = head;

// March down list until we find the // previous element

while (temp.next() != curr) temp = temp.next();

curr = temp; }

(31)

31

Get/Set Position

/** Return position of the current element */ public int currPos() {

Link<E> temp = head; int i;

for (i=0; curr != temp; i++) temp = temp.next();

return i; }

/** Move down list to "pos" position */ public void moveToPos(int pos) {

assert (pos>=0) && (pos<=cnt) : "Position out of range"; curr = head;

for(int i=0; i<pos; i++) curr = curr.next();

(32)

Comparison of Implementations

Array-Based Lists:

Insertion and deletion are

(

n

).

Prev and direct access are

(1).

Array must be allocated in advance.

No overhead if all array positions are full.

Linked Lists:

Insertion and deletion are

(1).

Prev and direct access are

(

n

).

(33)

33

Space Comparison

“Break-even” point:

DE

=

n

(

P

+

E

);

n

=

DE

P

+

E

E

: Space for data value.

P

: Space for pointer.

(34)

Space Example

Array-based list: Overhead is one pointer (4

bytes) per position in array – whether used or

not.

Linked list: Overhead is two pointers per link

node

one to the element, one to the next link

Data is the same for both.

(35)

35

Freelists

System

new

and garbage collection are slow.

(36)

Link Class Extensions

static Link freelist = null;

static <E> Link<E> get(E it, Link<E> nextval) { if (freelist == null)

return new Link<E>(it, nextval); Link<E> temp = freelist;

freelist = freelist.next(); temp.setElement(it);

temp.setNext(nextval); return temp;

}

void release() { // Return to freelist element = null;

next = freelist; freelist = this;

(37)

37

Using Freelist

public void insert(E it) {

curr.setNext(Link.get(it, curr.next())); if (tail == curr) tail = curr.next(); cnt++;

}

public E remove() {

if (curr.next() == null) return null; E it = curr.next().element();

if (tail == curr.next()) tail = curr; Link<E> tempptr = curr.next();

curr.setNext(curr.next().next()); tempptr.release();

cnt--;

return it; }

Referensi

Dokumen terkait

Strategi ini bertujuan untuk mendapatkan keuntungan lebih melalui penekanan biaya produksi dengan menemukan pemasok alternatif sehingga harga bahan baku

Selain digunakan untuk memberikan latihan simulasi ketakutan yang biasa dialami oleh anak – anak, terdapat perangkat lain pada board game yang akan digunakan untuk

Penulis menyadari banyak pihak yang telah membantu dalam penyusunan makalah ini.. Maka dengan rendah hati, penulis

Double Link list selalu memiliki pointer petunjuk yang selalu menunjuk pada awal dari list yang disebut Head.. Double Link list juga selalu memiliki pointer petunjuk

Literasi Mikrobiologi pada Aspek “ Pengetahuan Dasar ” pada Siswa MA Program IPA [SMA], Mahasiswa yang Belum Mendapatkan Perkuliahan. Mikrobiologi [PT-Pra MO], dan Mahasiswa

Gambar 4.2 Hubungan Kuat Tekan Bata Beton Ringan pada Umur 28 Hari dengan Penambahan Zat Kapur pada Tiap Tipe Bata Beton Ringan

Formulasi bubur bayi instan memberikan pengaruh sangat nyata terhadap kadar air, kadar abu, kadar protein, kadar lemak, kadar serat kasar, kadar karbohidrat, densitas kamba, uji

Dengan mengikuti training SW 03, Anda diharapkan dapat menggunakan software AnswerTree yang memiliki berbagai metode analisis untuk melakukan prediksi