- Linked List
Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data
Type) yang bersifat dinamis. Linked List dapat dimanfaatkan secara effektif sesuai
dengan keperluan. Linked List juga dapat benar benar dihapus / dibersihkan dari
memory.Linked List sebenarnya merupakan suatu typedata tersendiri. Di bahasa
Java, Linked List bisa berupa suatu Class ataupun Record. Ciri ciri utama dari
Linked List adalah, dia mempunyai minimal dua elemen utama. Elemen elemen
itu adalah data dan pointer untuk menunjukkan ke list berikutnya.- ArrayArray
berbeda dengan Linked List. Array merupakan suatu struktur data yang bersifat
statis. Array harus dialokasikan terlebih dahulu di dalam memory sebelum kita
memakainya.
Perbedaan mendetail antara Array dan Linked List adalah sebagai berikut :
Linked List
- Pengaksesan DinamisPengalokasian random pada
alamat memory- Dapat
dibebaskan dari memory- Tidak
menggunakan konsep indexing
Array
- Pengaksesan StatisPengalokasian berurut pada
alamat memory- Tidak dapat
dibebaskan dari memoryMenggunakan konsep indexing
5.
- Linked List
Kita akan lebih efektif jika kita menggunakan konsep Linked List jika kita
memerlukan suatu pengaksesan pada struktur data yang lebih dinamis. Konsep yang
lebih cocok menggunakan linked list adalah : Stack, Queue, Tree, dan Graph.
Hal ini dikarenakan oleh sifat dinamis dari Linked List. Kita tidak perlu untuk
mengetahui berapa block memory yang akan kita akses. Jadi, jika kita butuh block
baru pada memory, tinggal menyisipkan pada kanan atau kiri list yang telah ada.
- Array
Kita dapat memanfaatkan secara efektif konsep array dengan mengenal metode
indexing pada array. Array merupakan struktur data statis yang mempunyai index
penomoran alamat variable array yang dimaksud. Jadi, secara umum, kita dapat
mengaksesnya dengan lebih cepat.
Konsep konsep yang dapat memanfaatkan konsep indexing untuk mempercepat
pengaksesannya adalah Sorting dan Searching.
Hal ini dikarenakan oleh penomoran alamat variable pada memory yang telah
diketahui terlebih dahulu. Jadi, semisal kita menginginkan mencari variable dengan
indeks tengah, kita bisa langsung menujuk ke indeksnya.
- Singly Linked List :
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya
dan juga memiliki field yang berisi data.
Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan
digunakan sebagai kondisi berhenti saat pembacaan linked list.
- Double Linked List :
Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu:
1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk
ke pointer sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan
prev-nya menunjuk ke null.
- Single Circular Linked List :
Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri
dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer
terdepannya.
- Double Circular Linked List :
Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri
secara circular.
6. a. Node find(int key)
Suatu method java untuk mencari sebuah nilai pada linkedlist. Algoritma dari
Operasi dasar adalah sebagai berikut :
Node find(int key){ if(now.data==key)return now;else
{ now=now.next;
return (find(key));
}
}
tail = input;
}
else
{
input.next = head;
head = input;
}
}
d. Void romoveFirst()
Method untuk menghapus list pertama. Algoritma dari Operasi dasar adalah sebagai
berikut :
void removeFirst(){ Node temp = head;if (!isEmpty()){ if (head ==
tail)
head = tail = null;
else
{
temp = temp.next;
head = temp;
temp = null;
}
}
else
System.out.println(Data is empty!);
}
e. Void romoveLast()
Method untuk menghapus list terakhir. Algoritma dari Operasi dasar adalah sebagai
berikut :
void removeLast(){Node temp = head;if (!isEmpty()){if (tail ==
head){
head = tail = null;
}
else {
while (temp.next != tail){
temp = temp.next;
}
temp.next = null;
tail = temp;
temp = null;
}
}
else System.out.println(Data is empty!);
}
}
}
Queue / Antrian
Queue (antrian) adalah struktur data dimana data yang pertama kali dimasukkan
adalah data yang pertama kali bisa dihapus. Atau bisa juga disebut dengan struktur
data yang menggunakan mekanisme FIFO (First In First Out).
queue
queue
Queue dalam kehidupan sehari-hari seperti antrian pada penjualan tiket kereta api,
dimana orang yang pertama datang adalah orang yang pertama kali dilayani untuk
membeli tiket. Jika ada orang baru yang datang akan membali tiket, maka posisinya
berada pada urutan paling belakang dalam antrian tersebut. Orang yang berada pada
posisi terakhir dalam antrian adalah yang terakhir kali dapat dilayani dan
memperoleh tiket kereta api (kalau kurang beruntung, maka akan kehabisan tiket).
Contoh lain adalah nasabah yang antri di teller bank, paket data yang menunggu
untuk ditransmisikan lewat internet, antrian printer dimana terdapat antrian print
job yang menunggu giliran untuk menggunakan printer, dsb.
Istilah-istilah yang digunakan dalam queue (antrian)
Memasukkan data (insert) disebut juga dengan put, add, atau enqueue. Menghapus
data (remove) biasa disebut dengan istilah delete, get, atau dequeue. Bagian
belakang queue, dimana data bisa dimasukkan disebut dengan back, tail (ekor), atau
end (akhir). Sedangkan bagian depan (front) queue dimana data bisa dihapus juga
biasa disebut dengan istilah kepala (head).Circular Queue
Di dunia nyata apabila seseorang sedang mengantri (misalnya antri tiket kereta api),
apabila telah dilayani dan memperoleh tiket, maka ia akan keluar dari antrian dan
orang-orang yang berada di belakangnya akan bergerak maju ke dapan. Kita bisa saja
menggerakkan setiap item data ke depan apabila kita menghapus data yang
terdepan, tetapi hal ini kurang efektif. Sebaliknya kita tetap menjaga setiap item data
di posisinya, yang kita lakukan hanyalah merubah posisi front dan rear saja.
Yang menjadi permasalahan adalah apabila posisi rear berada pada bagian akhir dari
array (atau pada nomor indeks yang terbesar). Meskipun ada bagian yang kosong di
awal-awal array karena mungkin data telah dihapus, data baru tidak bisa
dimasukkan lagi karena rear-nya sudah tidak bisa bergerak lagi. Atau mungkinkah
posisi rear nya bisa berpindah? Situasi seperti itu bisa dilihat seperti gambar berikut:
circular queueUntuk menghindari permasalahan seperti itu (tidak bisa memasukkan
data baru) meskipun queue-nya belum penuh, maka front dan rear-nya berputar
(kembali) ke bagian awal array. Kejadian seperti ini dinamakan dengan circular
queue (atau kadang-kadang disebut juga dengan istilah ring buffer). Kejadian seperti
front = 0;
nItems; // item (data) berkurang satu
return temp;
}
//
public long peekFront() //
{
return queArray[front];
}
//
public boolean isEmpty() //benar jika queue-nya kosong
{
return (nItems==0);
}
//
public boolean isFull() // benar jika queue-nya penuh
{
return (nItems==maxSize);
}
//
public int size() // jumlah ietm (data) dalam queue
{
return nItems;
}
//
} // end class Queue
QueueApp.java
class QueueApp
{
public static void main(String[] args)
{
Queue theQueue = new Queue(5); // queue menampung 5 item (data)
theQueue.insert(10); // masukkan 4 item (data)
theQueue.insert(20);
theQueue.insert(30);
theQueue.insert(40);
theQueue.remove(); // hapus 3 item (data)
theQueue.remove(); // (10, 20, 30)
theQueue.remove();
theQueue.insert(50); // masukkan 4 item (data) lagi
theQueue.insert(60); // (wraps around)
theQueue.insert(70);
theQueue.insert(80);
while( !theQueue.isEmpty() ) // hapus dan tampilkan
{ // all items
long n = theQueue.remove(); // (
System.out.print(n);
System.out.print( );
}
System.out.println();
} // end main()
} // end class QueueApp
method insert()
Method insert() mengasumsikan bahwa queue tidak penuh (full). Kita tidak
melihatnya dalam main(), tetapi kita bisa memanggil insert() hanya setelah
memanggil isFull() dan memperoleh nilai kembalian yang salah. Pengisian data
dengan cara menaikkan rear dan mengisikan data baru tersebut pada rear yang baru
sekarang. Tetapi, jika rear berada di puncak array, pada maxSize-1, maka harus
kembali ke posisi terbawah array sebelum penyisipan dilakukan. Caranya dengan
memberi nilai rear=-1, sehingga jika terjadi kenaikan pada pada rear, maka rear akan
menjadi 0, dasar dari array. Dan akhirnya, nItem bertambah.
Method remove()
method remove mengasumsikan queue-nya tidak kosong. Untuk meyakinkan bahwa
queue-nya tidak kosong, anda harus memanggil method isEmpty(). Penghapusan
selalu dimulai dengan memperoleh nilai pada front dan kemudian mengurangi front.
Jika front-nya terletak pada akhir array, maka harus kembali ke 0. Kemudian nItems
dikurangi.
Method peek()
untuk mendapatkan nilai pada front.
Method isEmpty(), isFull(), and size()
untuk mengecek nItems, apakah kosong atau penuh
Pengertian Struktur data
Struktur Data adalah cara penyimpanan, penyusunan dan pengaturan data di dalam
media penyimpanan komputer sehingga data tersebut dapat digunakan secara
efisien. struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu
kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan
untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap baris dari
kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom untuk
data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah secara dinamis
sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap. Dengan
sifatnya ini, sebuah struktur data dapat diterapkan untuk pengolahan database
(misalnya untuk keperluan data keuangan) atau untuk pengolah kata (word
processor) yang kolomnya berubah secara dinamis.
Graph pada struktur data
(C,E), (C,G), (C,H), (C,I), (D,E), (D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I),
(I,J), (I,M), (J,K), (J,M), (L,K), (L,M)}.
b. Graph Tak Berarah (Undirected Graph atau Undigraph)
Setiap sisi {x, y} berlaku pada kedua arah: baik x ke y maupun y ke x. Secara grafis
sisi pada undigraph tidak memiliki mata panah dan secara notasional menggunakan
kurung kurawal.
Contoh Undigraph G = {V, E}
V = {A, B, C, D, E, F, G, H, I,J, K, L, M} E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H},
{C,E}, {C,G}, {C,H}, {C,I}, {D,E}, {D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K},
{H,I}, {I,J}, {I,M}, {J,K}, {J,M}, {L,K}, {L,M}}. Khusus graph, undigraph bisa sebagai
digraph (panah di kedua ujung edge berlawanan) Struktur data linear maupun
hirarkis adalah juga graph. Node-node pada struktur linear ataupun hirarkis adalah
verteks-verteks dalam
ngertian graph dengan sisi-sisinya menyusun node-node tersebut secara linear atau
hirarkis. Struktur data linear adalah juga tree dengan pencabangan pada setiap node
hanya satu atau tidak ada. Linear 1-way linked list (digraph), linear 2-way linked list
(undigraph)
single linked list non circular
Linked List
Linked List adalah salah satu bentuk struktur data, berisi kumpulan data
(node) yang tersusun secara sekuensial, saling sambungmenyambung, dinamis dan terbatas.
Linked List sering disebut juga Senarai Berantai
Linked List saling terhubung dengan bantuan variabel pointer
Masing-masing data dalam Linked List disebut dengan node (simpul) yang
menempati alokasi memori secara dinamis dan biasanya berupa struct
yang terdiri dari beberapa field.
Bentuk Node Single Linked List non Circular
Pengertian:
Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta
pada akhir node, pointernya menunjuk NULL
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Setiap node pada linked list mempunyai field yang berisi pointer ke node
berikutnya, dan juga memiliki field yang berisi data.
Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi
berhenti pada saat pembacaan isi linked list.
Deklarasi Node
Ada tida macam kunjungan pada pohon biner, yaitu kunjungan PreOrder, InOrder,
dan PostOrder. Selain itu ada kunjungan LevelOrder, yaitu yang berdasarkan
kedudukan tiap simpul dalam pohon. Keempat kunjungan itu dibagi menjadi
orientasi, yaitu left to right oriented (LRO) atau kunjungan dilakukan di cabang kiri
dulu baru ke cabang kanan dan right to left oriented (RLO) atau kunjungan
dilakukan di cabang kanan dulu baru ke cabang kiri.
1. Kunjungan PreOrder
Kunjungan PreOrder LRO atau sering disebut dengan depth first order
menggunakan urutan sebagai berikut :
Cetak isi simpul yang dikunjungi.
Kunjungi cabang kiri.
Kunjungi cabang kanan.
Prosedur kunjungan PreOrder dapat dilakukan dengan cara rekursif atau non
rekursif. Prosedur kunjungan secara PreOrder LRO dengan rekursif disajikan berikut
ini :
Procedure PreOrder (Root:Pohon);
Begin
If Root <> nil then
Begin
Write (Root^.Info);
PreOrder (Root^.kiri);
PreOrder (Root^.kanan);
End;
End;
2. Kunjungan InOrder
Kunjungan InOrder LRO atau sering disebut dengan symmetric order,menggunakan
urutan sebagai berikut :
Kunjungi cabang kiri.
Cetak isi simpul yang dikunjungi.
Kunjungi cabang kanan.
Seperti halnya PreOrde dan InOrder, prosedur kunjungan PostOrder juga dapat
dilakukan dengan cara rekursif atau non rekursif.
Prosedur kunjungan secara PostOrder LRO dengan rekursif disajikan berikut ini :
Procedure PostOrder (Root:Pohon);
Begin
If Root <> nil then
Begin
PostOrder (Root^.kiri);
PostOrder (Root^.kanan);
Write (Root^.Info);
End;
End;
4 Kunjungan LevelOrder
Kunjungan Level order mempunyai urutan sebagai berikut :
kunijungan dimulai dari simpul yang ada pada tingkat 1 (akar),
diteruskan pada simpul ditingkat 2 ,tingkat 3 dan seterusnya
Stack / tumpukan
1 DAFTAR LINER
Sebuah daftar linier atau list linier [linear list], merupakan suatu Struktur Data
Umum yang terbentuk dari barisan hingga [yang terurut] dari satuan data,ataupun
dari Record Elemen yang terdapat di dalam daftar di sebut simpul atou node
File merupakan saiah satu contoh dari daftar linier yang elemen-elemennya berupa
Record.Sebagai contoh,Nomor di dalam Buku telepon membentu sebuah daftar
linier, Yang apabila daftarmterebut di masukan ke dalam memori secara berangkai
akan di dapat sebuah tab
E
D
B
S NOEL(S) = 4, TOP(S) = E, dan seterusnya
A
Kita pada hakekatnya tidak membatasi beberapa banyak element dapat masuk ke
dalam Stack. Untuk suatu Stack S = [S1,S2.SNOEL], kita katakana bahwa elemen
S1 berada di atas elemen Sj, jika I lebih besar dari j. Suatu element tidak dapat kita
POP ke luar, sebelum semua elemen di atasnya di keluarkan.
3 OPERASI PADA STACK
Terdapat empat operasi pada Stack, yakni CEATE (Stack), ISEMPETY(Stack),
PUSH(elemen,stack), dan POP(Stack). CREATE(S) adalah Operator yang
menyebabkan Stack S menjadi Stack hampa.Jadi NOEL (CREATE(S)) adalah 0, dan
TOP (CREATE(S)) tak terdevinisi. Operetor ISEMPETY(S) bermaksud memeriksa
Stack S hampa atau tidak. Operator PUSH (E,S) akan berkerja menambahkn elemen
E pada Stack S,E ditempatkan sebagai TOP(S). Operator POP(S) merupakan
operator yang bekerja mengeluarkan elemen TOP(S) dari dalam Stack. TOP(S) akan
mengurangi nilai NOEL(S) dengan 1. Suatu kesalahan akan terjadi apabila kita
mencoba melakukan POP(S) terhadap Stack S yang hampa.
Dalam Pascal :
Type stackstruct;
record Stack : Array [ 1..100] of integer;
topptr : integer
end
var S : stackstruct;
Kombinasi tidak mengerti aturan INFO yang kita inginkan. Untuk itu Pemprogram
harus berhati-hati dan tidak member indeks kepada S sembarang tempat, selain
dengan nilai TOP-PTR.
5 APLIKASI STACK
Stack sangat luas pemakaiannya dalam menyelesaikan dalam menyelesaikan
problema. Kompiler, Sistem Operasi, dan berbagai Program Aplikasi banyak
menggunakan Stack tersebut. Salah satu contoh adalah problema atau Matching
Parantheses. Sebuah kapiler mempunyai tugas, salah satu di antaranya adalah
menyelidiki apakan pemrogram telah dengan cepat mengikti aturan tatabahasa, atau
sintaks, dari Bahasa pemprograman yang bersangkutan.
NOTASI POSTFIX
Aplikasi lain dari stack adalah pada kompilasi dari ekspresi dalam bahasa
pemrograman tingkat tinggi. Kompilator harus mampu menyerahkan bentuk yang
biasa, misalnya ((A+B)*C/D+E^F)/G ke suatu bentuk yang dapat lebih mudah
dipergunakan dalam pembentukan kode objeknya. Cara yang biasa kita lakukan
dalam menulis ekspresi aritmetik seperti di atas, dikenal sebagai notasi infix. Untuk
operasi binar seperti menjumlah, membagi, mengurangi, mengalikan ataupun
memangkatkan, operator tampil di antara dua operand, misalnya operator + tampil
di antara operand A dan B pada operasi A + B. Stack dapat digunakan untuk
mentransformasikan notasi infix ini menjadi notasi posfix. Pada notasi posfix, kedua
operand tampil bersama di depan operator, misalnya AB+atau PQ* dan sebagainya.
Kompilator akan lebih mudah menangani ekspresi dalam notasi posfix ini.
1. Pilih sub-ekspresi yang berisi dua operand dan satu operator yang memiliki level
tertinggi
di ekspresi di atas. Didapat B / C dan C * D. Pilih yang paling kiri, maka kita peroleh:
B / C.
maka
ekspresi semula menjadi: A + E * D.
3. Lakukan langkah ke (2) hingga ekspresi di atas menjadi dua operand dan satu
operator
saja. Didapat: A + F
Dengan demikian, ekspresi infix: A+B/C*D akan menjadi ABC/D*+ dalam notasi
postfix. Perhatikan dan pelajari tabel berikut ini:
Bila ada sub-ekspresi di dalam tanda kurung, maka sub-ekspresi tersebut harus
dikerjakan terlebih dulu.
Berikut ini diberikan sebuah algoritma untuk mengubah notasi infix ke dalam notasi
posfix. Sebuah stack digunakan untuk keperluan ini. Ekspresi diamati satu persatu
dari kiri ke kanan. Pada algoritma ini terdapat 4 aturan dasar, sebagai berikut:
1. Jika simbol adalah ( (kurung buka), maka ia kita PUSH ke dalam stack
2. Jika simbol adalah ) (kurung tutup), POP dari stack elemen-elemen stack,
sampai pertama
kali kita POP simbol (. Semua elemen stack yang di POP tersebu merupakan
output,
kecuali ( tadi.
3. Jika simbol adalah sebuah operand, tanpa melakukan perubahan elemen stack,
operand
tersebut langsung merupakan output.
4. Jika simbol adalah sebuah operator, maka jika TOP stack adalah operator dengan\
level lebih
tinggi atau sama, maka elemen TOP kita POP, sekaligus keluar sebagai output,
dilanjutkan
proses seperti ini sampai TOP merupakan ( atau operator dengan level lebih
rendah. Kalau
hal ini terjadi, operator (yang diamati) kita PUSH ke dalam stack. Biasanya
ditambahkan
simbol ; (titik-koma) sebagai penutup ekspresi. Dalam keadaan ini, kita POP semua
elemen
stack, sehingga stack menjadi hampa.
Dapat dicatat bahwa terdapat 3 level operator, yakni pemangkatan (level tertinggi),
level menengahnya adalah perkalian (*) dan pembagian (/) dan level terendah
adalah penjumlahan (+) dan pengurangan (-). Tabel berikut menunjukkan
pelaksanaan algoritma di atas untuk mengubah ekspresi ((A+B)*C/D+E^F)/G; ke
dalam notasi postfix. Jadi, ((A+B)*C/D+E^F)/G akan menjadi AB+C*D/EF^+G/
dalam notasi postfix.
Stack / tumpukan
1 DAFTAR LINER
Sebuah daftar linier atau list linier [linear list], merupakan suatu Struktur Data
Umum yang terbentuk dari barisan hingga [yang terurut] dari satuan data,ataupun
dari Record Elemen yang terdapat di dalam daftar di sebut simpul atou node
File merupakan saiah satu contoh dari daftar linier yang elemen-elemennya berupa
Record.Sebagai contoh,Nomor di dalam Buku telepon membentu sebuah daftar
linier, Yang apabila daftarmterebut di masukan ke dalam memori secara berangkai
akan di dapat sebuah tab
2 stack atau tumpukan
Stack atau tumpukan adalah bentuk khusus dari list linier.Pada stack, penghapus
Serta pemasukan elemenya hanya dapat dilakukan pada satu posisi yakni posisi
akhir dari list. Posisi ini di sebut Puncak atau Top dari Stack. Elemen stack s pada
posisi ini di nyatakan dengan top (S).
Jelasnya bila Stack (S)=[S1,S2.ST] maka top (S) adalah ST. Banyaknya elemen
stack S pada saat tertentu biasa kita sebut sebagai NOEL (S)Jadi untuk stack kita di
atas, NOEL (S)=T.
Operator penghapus elemen pada Stack disebut POP, sedangkan Operator
pemasukan element , disebut PUSH.
E
D
B
S NOEL(S) = 4, TOP(S) = E, dan seterusnya
A
Kita pada hakekatnya tidak membatasi beberapa banyak element dapat masuk ke
dalam Stack. Untuk suatu Stack S = [S1,S2.SNOEL], kita katakana bahwa elemen
S1 berada di atas elemen Sj, jika I lebih besar dari j. Suatu element tidak dapat kita
POP ke luar, sebelum semua elemen di atasnya di keluarkan.
3 OPERASI PADA STACK
Terdapat empat operasi pada Stack, yakni CEATE (Stack), ISEMPETY(Stack),
PUSH(elemen,stack), dan POP(Stack). CREATE(S) adalah Operator yang
menyebabkan Stack S menjadi Stack hampa.Jadi NOEL (CREATE(S)) adalah 0, dan
TOP (CREATE(S)) tak terdevinisi. Operetor ISEMPETY(S) bermaksud memeriksa
Stack S hampa atau tidak. Operator PUSH (E,S) akan berkerja menambahkn elemen
E pada Stack S,E ditempatkan sebagai TOP(S). Operator POP(S) merupakan
operator yang bekerja mengeluarkan elemen TOP(S) dari dalam Stack. TOP(S) akan
mengurangi nilai NOEL(S) dengan 1. Suatu kesalahan akan terjadi apabila kita
mencoba melakukan POP(S) terhadap Stack S yang hampa.
4 DEKLARASI STACK DALAM VOBOL DAN PASKAL
Meskipun Stack amat luas digunakan, banyak bahasa pemprograman tidak
mempunyai Type Data Stack secara built-in. Dalam hal ini, Pemrogram harus
memanipulasi sendiri fasilitas yang dimiliki Bahasa Pemprogram tersebut, untuk
dapat melakukan Operasi Stack terhadap Variabel Stack. Mungkin cara yang paling
sederhana adalah membentuk Stack dalam bemtuk semacam Array. Satu hal yang
nyata membedakan Stack dengan Array adalah banyaknya elemen Stack yang dapat
bertambah atau berkurang setiap waktu, sementara banyaknya elemen sebuah Array
selalu tetap. Deklerasi dari Variable S yang bertype data Stack. Diasumsikan bahwa
elemen dari S masing masing bertype data integer. Dan panjang Stack minimum
100 Elemen. Kita mendeklerasi bahwa sebuah Array yang dilengkapi dengan
Variable TOP-PTR ini menyatakan subskrip dari elemen TOP(S) dari Stack . Kita
menambahkan kombinasi dari Array dan indikator untuk TOP tersebut dengan
nama STACK-STRUC. Dengan penyajian seperti ini, berlaku bahwa NOEL(S) = TOPPTR, ISEMPETY(S) adalah true bila YTOP-PTR = 0, DAN false bila TOP-PTR lebih
besar dari 0.
Dalam COBOL :
01 STACK-STRUCT
02 S PIC 9 (5)
OCCURS 100 TIMES.
Dalam Pascal :
Type stackstruct;
record Stack : Array [ 1..100] of integer;
topptr : integer
end
var S : stackstruct;
Kombinasi tidak mengerti aturan INFO yang kita inginkan. Untuk itu Pemprogram
harus berhati-hati dan tidak member indeks kepada S sembarang tempat, selain
dengan nilai TOP-PTR.
5 APLIKASI STACK
Stack sangat luas pemakaiannya dalam menyelesaikan dalam menyelesaikan
problema. Kompiler, Sistem Operasi, dan berbagai Program Aplikasi banyak
menggunakan Stack tersebut. Salah satu contoh adalah problema atau Matching
Parantheses. Sebuah kapiler mempunyai tugas, salah satu di antaranya adalah
menyelidiki apakan pemrogram telah dengan cepat mengikti aturan tatabahasa, atau
sintaks, dari Bahasa pemprograman yang bersangkutan.
NOTASI POSTFIX
Aplikasi lain dari stack adalah pada kompilasi dari ekspresi dalam bahasa
pemrograman tingkat tinggi. Kompilator harus mampu menyerahkan bentuk yang
biasa, misalnya ((A+B)*C/D+E^F)/G ke suatu bentuk yang dapat lebih mudah
dipergunakan dalam pembentukan kode objeknya. Cara yang biasa kita lakukan
dalam menulis ekspresi aritmetik seperti di atas, dikenal sebagai notasi infix. Untuk
operasi binar seperti menjumlah, membagi, mengurangi, mengalikan ataupun
memangkatkan, operator tampil di antara dua operand, misalnya operator + tampil
di antara operand A dan B pada operasi A + B. Stack dapat digunakan untuk
mentransformasikan notasi infix ini menjadi notasi posfix. Pada notasi posfix, kedua
operand tampil bersama di depan operator, misalnya AB+atau PQ* dan sebagainya.
Kompilator akan lebih mudah menangani ekspresi dalam notasi posfix ini.
1. Pilih sub-ekspresi yang berisi dua operand dan satu operator yang memiliki level
tertinggi
di ekspresi di atas. Didapat B / C dan C * D. Pilih yang paling kiri, maka kita peroleh:
B / C.
3. Lakukan langkah ke (2) hingga ekspresi di atas menjadi dua operand dan satu
operator
saja. Didapat: A + F
Dengan demikian, ekspresi infix: A+B/C*D akan menjadi ABC/D*+ dalam notasi
postfix. Perhatikan dan pelajari tabel berikut ini:
Berikut ini diberikan sebuah algoritma untuk mengubah notasi infix ke dalam notasi
posfix. Sebuah stack digunakan untuk keperluan ini. Ekspresi diamati satu persatu
dari kiri ke kanan. Pada algoritma ini terdapat 4 aturan dasar, sebagai berikut:
1. Jika simbol adalah ( (kurung buka), maka ia kita PUSH ke dalam stack
2. Jika simbol adalah ) (kurung tutup), POP dari stack elemen-elemen stack,
sampai pertama
kali kita POP simbol (. Semua elemen stack yang di POP tersebu merupakan
output,
kecuali ( tadi.
3. Jika simbol adalah sebuah operand, tanpa melakukan perubahan elemen stack,
operand
tersebut langsung merupakan output.
4. Jika simbol adalah sebuah operator, maka jika TOP stack adalah operator dengan\
level lebih
tinggi atau sama, maka elemen TOP kita POP, sekaligus keluar sebagai output,
dilanjutkan
proses seperti ini sampai TOP merupakan ( atau operator dengan level lebih
rendah. Kalau
hal ini terjadi, operator (yang diamati) kita PUSH ke dalam stack. Biasanya
ditambahkan
simbol ; (titik-koma) sebagai penutup ekspresi. Dalam keadaan ini, kita POP semua
elemen
stack, sehingga stack menjadi hampa.
Dapat dicatat bahwa terdapat 3 level operator, yakni pemangkatan (level tertinggi),
level menengahnya adalah perkalian (*) dan pembagian (/) dan level terendah
adalah penjumlahan (+) dan pengurangan (-). Tabel berikut menunjukkan
pelaksanaan algoritma di atas untuk mengubah ekspresi ((A+B)*C/D+E^F)/G; ke
dalam notasi postfix. Jadi, ((A+B)*C/D+E^F)/G akan menjadi AB+C*D/EF^+G/
dalam notasi postfix.
TREE (POHON)
adalah salah satu bentuk sirkuit salah satu bentuk graph terhubung yang tidak
mengandung sirkuit.
karena merupakan graph terhubung,maka pada pohon (tree) selalu terdapat path
yang menghubungkan setiap simpul dalam pohon.
tree dapat juga didefinisikan sebagai kumpulan elemen yang salah satu elemenya di
sebut akar(root) dan sisa elemen lainya (simpul)yang terpecah menjadi sebuah
himpunan yang saling tidak berhubungan yang di sebut sub pohon (subtree) atau
cabang.
Sifat sifat pohon
1. Jika Pohon mempunyai simpul sebanyak n,maka banyaknya ruas atau edge adalah
n-1
2. Mempunyai simpul khusus yang di sebut root,jika simpul tersebut mempunyai
derajat keluar >=0,dan derajat masuk = 0
3. Mempunyai simpul yang disebut daun/leaf,jika simpul tersebut berderajat keluar
= 0,dan berderajat masuk = 1
4. Setiap simpul mempunyai Tingkatan/level yang dimulai dari root yang levelnya
=1,sampai dengan level ke-n yang berada pada daun yang paling bawah.simpul yang
mempunyai level sama di sebut bersaudara
5. Pohon mempunyai ketinggian atau kedalaman atau height ,yang merupakan level
tertinggi.
6. Pohon mempunyai berat atau weight,yang banyaknya daun pada pohon.
* Cara ketiga
dengan cara menggunakan notasi kurung untuk gambar pada diagram venn di atas.
hasilnya : (P(Q(R,S)),T(U(V,W)))
* Cara Keempat
dengan menggunakan notasi tingkat dan notasi garis
Pengurutan data dalam struktur data sangat penting untuk data yang beripe data
numerik ataupun karakter.
Pengurutan dapat dilakukan secara ascending (urut naik) dan descending (urut
turun)
Pengurutan (Sorting) adalah proses menyusun kembali data yang sebelumnya telah
disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menurut
aturan tertentu.
Contoh:
Data Acak : 5 6 8 1 3 25 10
Ascending : 1 3 5 6 8 10 25
Descending : 25 10 8 6 5 3 1
Array
Struktur data Array adalah organisasi kumpulan data homogen yang ukuran atau
jumlah elemen
maksimumnya telah diketahui dari awal. Array umumnya disimpan di memori
komputer
secara kontigu (berurutan). Deklarasi dari array adalah sebagai berikut:
int A[5]; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe
integer.
Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung. Nilai
di masing-masing posisi elemen dapat diambil dan nilai dapat disimpan tanpa
melewati
posisi-posisi lain.
Terdapat dua tipe operasi, yaitu:
1. Operasi terhadap satu elemen/posisi dari array
2. Operasi terhadap array sebagai keseluruhan