• Tidak ada hasil yang ditemukan

Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

N/A
N/A
Protected

Academic year: 2021

Membagikan "Masukan Judul... Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list"

Copied!
18
0
0

Teks penuh

(1)

Universitas Muhammadiyah Sukabumi Artikel Struktur Data

Oleh : fahmi fauzi

Masukan Judul ...

1. STACK DAN QUEUE DENGAN LINKED LIST

Pengertian Linked list :

●sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian

●struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.

Bentuk Umum :

Infotype àsebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list

Next àaddress dari elemen berikutnya (suksesor)

Jika L adalah list, dan P adalah address, maka alamat elemen pertama list L dapat diacu dengan notasi :

Sebelum digunakan harus dideklarasikan terlebih dahulu :

Elemen yang diacu oleh P dapat dikonsultasi informasinya dengan notasi :

Beberapa Definisi :

1. List l adalah list kosong, jika First(L) = Nil

2. Elemen terakhir dikenali, dengan salah satu cara adalah karena

Next(Last) = Nil

Nil adalah pengganti Null, perubahan ini dituliskan dengan #define Nil Null

Single Linked List

(2)

yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List (NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana. Biasanya Linked List pada titik akhirnya akan menunjuk ke NULL).

Pembuatan Single Linked List dapat menggunakan 2 metode:

●LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)

●FIFO (First In First Out), aplikasinya : Queue (Antrean)

Double Linked List

Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama Linked list berpointer Ganda atau Double Linked List.

Circular Double Linked List

Merupakan double linked list yang simpul terakhirnya menunjuk ke simpul terakhirnya menunjuk ke simpul awalnya menunjuk ke simpul akhir sehingga membentuk suatu lingkaran.

Operasi-Operasi yang ada pada Linked List

Insert

Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list.

IsEmpty

Fungsi ini menentukan apakah linked list kosong atau tidak.

Find First

Fungsi ini mencari elemen pertama dari linked list

Find Next

Fungsi ini mencari elemen sesudah elemen yang ditunjuk now

Retrieve

(3)

Update

Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari sesuatu

Delete Now

Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke elemen berikut.

Delete Head

Fungsi ini menghapus elemen yang ditunjuk head. Head berpindah ke elemen sesudahnya.

Clear

Fungsi ini menghapus linked list yang sudah ada. Fungsi ini wajib dilakukan bila anda ingin mengakhiri program yang menggunakan linked list. Jika anda melakukannya, data-data yang dialokasikan ke memori pada program sebelumnya akan tetap tertinggal di dalam memori.

A. STACK DENGAN SINGLE LINKED LIST

Selain implementasi stack dengan array seperti telah dijelaskan sebelumnya, stack daat

diimplementasikan dengan single linked list. Keunggulannya dibandingkan array adalah penggunaan alokasi memori yang dinamis sehingga menghindari pemborosan memori.

Misalnya pada stack dengan array disediakan tempat untuk stack berisi 150 elemen, sementara ketika dipakai oleh user stack hanya diisi 50 elemen, maka telah terjadi pemborosan memori untuk sisa 100 elemen, yang tak terpakai. Dengan penggunaan linked list maka tempat yang disediakan akan sesuai dengan banyaknya elemen yang mengisi stack.

Dalam stack dengan linked list tidak ada istilah full, sebab biasanya program tidak menentukan jumlah elemen stack yang mungkin ada (kecuali jika sudah dibatasi oleh pembuatnya). Namun demikian sebenarnya stack ini pun memiliki batas kapasitas, yakni dibatasi oleh jumlah memori yang tersedia.

Operasi-operasi untuk Stack dengan Linked List

IsEmpty

Fungsi memeriksa apakah stack yang adamasih kosong.

Push

Fungsi memasukkan elemen baru ke dalam stack. Push di sini mirip dengan insert dalam single linked list biasa.

(4)

Pop

Fungsi ini mengeluarkan elemen teratas dari stack.

Clear

Fungsi ini akan menghapus stack yang ada.

B. QUEUE DENGAN DOUBLE LINKED LIST

Selain menggunakan array, queue juga dapat dibuat dengan linked list. Metode linked list yang digunakan adalah double linked list.

Operasi-operasi Queue dengan Double Linked List

IsEmpty

Fungsi IsEmpty berguna untuk mengecek apakah queue masih kosong atau sudah berisi data. Hal ini dilakukan dengan mengecek apakah head masih menunjukkan pada Null atau tidak. Jika benar berarti queue masih kosong.

IsFull

Fungsi IsFull berguna untuk mengecek apakah queue sudah penuh atau masih bisa menampung data dengan cara mengecek apakah Jumlah Queue sudah sama dengan MAX_QUEUE atau belum. Jika benar maka queue sudah penuh.

EnQueue

Fungsi EnQueue berguna untuk memasukkan sebuah elemen ke dalam queue (head dan tail mula-mula meunjukkan ke NULL).

DeQueue

Procedure DeQueue berguna untuk mengambil sebuah elemen dari queue. Hal ini dilakukan dengan cara menghapus satu simpul yang terletak paling depan (head).

1. STACK DAN QUEUE DENGAN ARRAY

1. STACK DENGAN MENGGUNAKAN ARRAY Pengertian Stack

(5)

●Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman

(6)

●Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack

●Contohnya, karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo juga.

Operasi-operasi/fungsi Stack

Push : digunakan untuk menambah item pada stack pada tumpukan paling atas

Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas

Clear : digunakan untuk mengosongkan stack

IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong

IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Stack with Array of Struct

●Definisikan Stack dengan menggunakan struct

●Definisikan MAX_STACK untuk maksimum isi stack

●Buatlah variabel array data sebagai implementasi stack secara nyata

●Deklarasikan operasi-operasi/function di atas dan buat implemetasinya

Deklarasi MAX_STACK

#define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9

Deklarasi STACK dengan struct dan array data

typedef struct STACK{

int top;

char data[10][10]; //misalkan : data adalah array of string

//berjumlah 10 data, masing-masing string

//menampung maksimal 10 karakter

};

Deklarasi/buat variabel dari struct

STACK tumpuk;

Inisialisasi Stack

●Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah KOSONG!

●Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH!

(7)

Fungsi IsFull

●Untuk memeriksa apakah stack sudah penuh?

●Dengan cara memeriksa top of stack, jika sudah sama dengan

MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full

●Ilustrasi:

Fungsi IsEmpty

●Untuk memeriksa apakah stack masih kosong?

●Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong!

●Program:

Fungsi Push

●Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack

●Tambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack berdasarkan indeks top of stack setelah ditambah satu (diincrement)

●Ilustrasinya:

Fungsi Pop

●Untuk mengambil elemen teratas dari stack.

●Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang

●Ilustrasinya:

Programnya:

Fungsi Print

●Untuk menampilkan semua elemen-elemen stack

●Dengan cara looping semua nilai array secara terbalik, karena kita harusmengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil!

Program:

1. QUEUE DENGAN MENGGUNAKAN ARRAY

●Queue = Antrian

Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya

●DEQUEUE adalah mengeluarkan satu elemen dari suatu Antrian

●Antrian dapat dibuat dengan menggunakan: Liniear Array dan Circular

Array

QUEUE DENGAN LINIEAR ARRAY

●Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar

(8)
(9)

●Sehingga membutuhkan variabel Head dan Tail

DEKLARASI QUEUE

OPERASI-OPERASI PADA QUEUE

- Create()

o Untuk menciptakan dan menginisialisasi Queue

o Dengan cara membuat Head dan Tail = -1

- IsEmpty()

o Untuk memeriksa apakah Antrian sudah penuh atau belum

o Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty

o Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala

antrian (elemen pertama dalam antrian) yang tidak akan berubahubah

o Pergerakan pada Antrian terjadi dengan penambahan elemen

Antrian kebelakang, yaitu menggunakan nilai Tail

- IsFull()

o Untuk mengecek apakah Antrian sudah penuh atau belum

o Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1

adalah batas elemen array pada C) berarti sudah penuh

- Enqueue(data)

o Untuk menambahkan elemen ke dalam Antrian, penambahan

(10)

o Penambahan elemen selalu menggerakan variabel Tail dengan cara

increment counter Tail

- Dequeue()

o Digunakan untuk menghapus elemen terdepan/pertama dari Antrian

o Dengan cara mengurangi counter Tail dan menggeser semua

elemen antrian kedepan.

o Penggeseran dilakukan dengan menggunakan looping

- Clear()

o Untuk menghapus elemen-elemen Antrian dengan cara membuat

Tail dan Head = -1

o Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus

arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai

-1 sehingga elemen-elemen Antrian tidak lagi terbaca

- Tampil()

o Untuk menampilkan nilai-nilai elemen Antrian

o Menggunakan looping dari head s/d tail

d w2�,we 0�mso-border-top-alt:solid windowtext .75pt; mso-border-left-alt:solid windowtext .75pt;mso-border-right-alt:solid windowtext .75pt; padding:0in 5.4pt 0in 5.4pt'>

99

(11)

FRONT = 1 ; REAR = 4

Kemudian dilakukan operasi REMOVE dua kali berurutan, sehingga bentuknya menjadi :

C D

1 2 3 4 5 6 7 8 ... 99 100

FRONT = 3 ; REAR = 4

Selanjutnya dilakukan operasi INSERT untuk 3 elemen secara berurutan, yaitu E, F dan G, maka bentuknya menjadi :

(12)

C D E F G

1 2 3 4 5 6 7 8 ... 99 100

(13)

Kemudian dilakukan operasi REMOVE lagi berurutan terhadap dua elemen, sehingga bentuknya menjadi :

E F G

1 2 3 4 5 6 7 8 ... 99 100

FRONT = 5 ; REAR = 7

Terlihat bahwa elemen-elemen queue bergerak terus dari kiri ke kanan sepanjang arraynya. Apa yang terjadi bila suatu saat REAR = 100 dan kita masih akan memasukkan suatu elemen ke dalam queue ? Dalam keadaan ini, batas maksimum telah dicapai, padahal kita masih ingin

menambah/memasukkan beberapa elemen lagi.

Salah satu cara/pendekatan untuk menyelesaikan masalah seperti ini adalah dengan menambah ukuran array yang digunakan. Artinya kita harus mendeklarasikan array dengan ukuran yang besar untuk menempatkan queue tersebut. Tetapi cara ini dianggap tidak efektif, karena keadaan serupa masih dapat muncul kembali. Cara lain yang dianggap lebih baik adalah dengan mengubah queue tersebut ke dalam bentuk yang disebut CIRCULAR.

Berikut ini contoh bentuk circular tersebut :

Dalam hal ini kondisi dari suatu queue kosong adalah :FRONT = REAR = 0

(14)

Selanjutnya jika elemen queue melampaui batas yang ada sedangkan kita masih memiliki ruang yang kosong, maka posisi FRONT dan REAR harus di-'reset' dulu agar kita bisa memasukkan elemen ke dalam queue tersebut.

(15)
(16)
(17)

Sedangkan bentuk procedure-nya dalam bahasa Pascal adalah sebagai berikut

PROCEDURE insert (eon : integer);

BEGIN

IF (q.rear = n) THEN q.rear := 1

ELSE q.rear := q.rear + 1;

IF (q.rear = q.front) THEN overflow_condition ELSE BEGIN q.queue[q.rear] := eon; IF (q.front = 0) THEN q.front := 1 end; end;

PROCEDURE remove (eoff : integer);

(18)

IF (q.front = 0) THEN underflow_condition

ELSE BEGIN

eoff := q.queue[q.front] ;

IF (q.front = q.rear) THEN

BEGIN q.front := 0; q.rear := 0 END ELSE IF (q.front = n) THEN q.front := 1 ELSE q.front:=q.front + 1 END; END;

Referensi

Dokumen terkait

15 Tahap tertinggi penyertaan dalam pertandingan berkaitan ICT Peringkat Kelab / Persatuan Peringkat Sekolah Peringkat Daerah Peringkat Negeri Peringkat Kebangsaan /

Pendekatan komunikatif memiliki ciri-ciri seperti yang dikemukakan Finoccaro dan Brumfit, sebagai berikut: 1] Kebermaknaan sangat penting dibandingkan dengan struktur

Hal tersebut mengandung pengertian bahwa apabila cangkang dipanaskan tanpa berhubungan dengan udara dan diberi suhu yang cukup tinggi, maka akan terjadi reaksi penguraian

Kekambuhan pada kasus skizofrenia dapat disebabkan oleh ketidakpatuhan pasien terhadap pengobatan maupun faktor pencetus psikososial, baik dari keluarga maupun lingkungan

Faktor-faktor lain seperti kenyamanan ibu pada saat menyusui, pengosongan pada payudara, keseringan bayi menghisap dan menelan secara kuat yang mempengaruhi kelancaran

Selanjutnya untuk mengetahui akan kewajiban setiap orang Islam baik bagi orang laki-laki dan perempuan dalam menuntut ilmu menurut perspektif para kyai Bangkalan, yang hal

kerja dari arus searah adalah membalik phasa tegangan dari gelombang yang mempunyai nilai positif dengan menggunakan komutator, dengan demikian arus yang berbalik arah dengan

Bagi yang telah memiliki User ID atau Email dan Password Aktif Danamon Online Banking, dapat melakukan aktivasi dengan langkah-langkah sbb:..  Klik Aktivasi di