Escolar Documentos
Profissional Documentos
Cultura Documentos
I.
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
Pada gambar di atas tampak bahwa sebuah data terletak pada sebuah lokasi memori area.
Tempat 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 manamana. Biasanya Linked List pada titik akhirnya akan menunjuk ke NULL).
Pembuatan Single Linked List dapat menggunakan 2 metode:
Harjanto Sutedjo
Page 1
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.
Pop
Fungsi ini mengeluarkan elemen teratas dari stack.
Clear
Fungsi ini akan menghapus stack yang ada.
Harjanto Sutedjo
Page 2
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).
II.
Pengertian Stack
Stack atau tumpukan adalah suatu stuktur data yang penting dalam pemrograman
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,
Harjanto Sutedjo
Page 3
Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
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!
Fungsi IsFull
Harjanto Sutedjo
Page 4
Ilustrasinya:
Programnya:
Fungsi Print
Dengan cara looping semua nilai array secara terbalik, karena kita harusmengakses dari indeks
array tertinggi terlebih dahulu baru ke indeks yang kecil!
Program:
2.
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
di ujung satunya
Sehingga membutuhkan variabel Head dan Tail
Harjanto Sutedjo
Page 5
Harjanto Sutedjo
Page 6
operasi : create()
procedure create;
begin
top := nil ;
end;
procedure create;
begin
top := 0;
end;
operasi : empty()
function empty : boolean;
begin
empty := false ;
if top = nil then empty := true ;
end;
operasi : full()
tidak ada istilah full pada stack.
program tidak menentukan jumlah elemen
stack yang mungkin ada. kecuali dibatasi
oleh pembuat program dan jumlah
memory yang tersedia. tempat akan
sesuai dengan banyaknya elemen yang
mengisi stack.
operasi : push()
procedure push (elemen : typedata) ;
var now:point ;
begin
now(now) ;
now^.isi := elemen ;
if empty then
now^.next := nil ;
else
now^.next := top ;
top := now ;
end;
operasi : pop()
procedure pop (var elemen : typedata) ;
Harjanto Sutedjo
Page 7
begin
if not empty then
begin
elemen := stack [top] ;
top := top 1 ;
end;
end;
operasi : clear
procedure clear ;
var trash : typedata ;
begin
while not empty do pop(trash) ;
end;
procedure clear ;
begin
top := 0 ;
end;
PEMBAHASAN
Dari perbandingan diatas, dapat dilihat pada linked list tidak dikenal istilah full. Hal ini berkaitan
dengan penggunaan alokasi memori pada linked list yang lebih dinamis jika dibandingkan dengan array,
sehingga pemborosan memory dapat dihindari. Program tidak menentukan jumlah elemen stack yang
mungkin ada. Kecuali dibatasi oleh pembuat program dan jumlah memory yang tersedia. Tempat akan
sesuai dengan banyaknya elemen yang mengisi stack.
2. Queue Dengan Linked List VS Queue Dengan Array
Implementasi queue menggunakan array
Implementasi sederhana
Ukuran memori harus ditentukan ketika sebuah objek queue dideklarasikan
Pemborosan tempat (memori) ketika menggunakan jumlah data yang lebih sedikit dari alokasi
memori
Tidak dapat menambahkan data melebihi maksimal ukuran array yang telah dideklarasikan
Implementasi queue menggunakan linked list
Menggunaka 2 buah pionter, qFront dan qRear, untuk menandai posisi depan dan belakang dari
queue
Harjanto Sutedjo
Page 8
Gambar :
Perbandingan implementasi queue, array VS linked list (contoh 2)
Memory requirements
o Array-based implementation
Diasumsikan ukuran queue 100 (string @2bytes)
Diasumsikan index membutuhkan 2 bytes
Total memory: (2 bytes x 101 slots) + (2 bytes x 2 indexes) = 206 bytes
o Linked-list-based implementation
Diasumsikan pointers membutuhkan 4 bytes
Total memory per node: 2 bytes + 4 bytes = 6 bytes
Gambar :
KESIMPULAN
Perbandingan Antara Stack-Queue Dengan Linked List Vs Stack-Queue Dengan Array
Untuk stack dan queue yang berukuran besar, terutama jumlah maksimal data tidak diketahui,
lebih baik menggunakan linked list.
Untuk perangkat yang memiliki memori terbatas, seperti small handheld devices, linked list
memiliki performa yang lebih bagus.
Harjanto Sutedjo
Page 9