LINIER LIST
Daftar
linear atau linear list, merupakan suatu struktur data umum yang
terbentuk dari barisan hingga (yang terurut) dari satuan data ataupun dari record.
Untuk mudahnya, elemen yang terdapat di dalam daftar disebut dengan simpul atau
node. Daftar disebut linear (lurus), karena elemen tampak seperti
berbaris, yakni bahwa setiap simpul, kecuali yang pertama dan yang
terakhir, selalu memiliki sebuah elemen penerus langsung (suksesor langsung)
dan sebuah elemen pendahulu langsung (predesesor langsung).
Di sini,
banyak simpul atau elemen, tersebut dapat berubah-ubah, berbeda dengan array
yang banyak elemennya selalu tetap. Kita menyatakan linear list A
yang mengandung T elemen pada suatu saat, sebagai A = [A1, A2, …AT].
Jika T = 0, maka A disebut list hampa atau null list.
Suatu
elemen dapat dihilangkan atau dihapus (deletion) dari sembarang posisi
dalam linear list, dan suatu elemen baru dapat pula dimasukkan (insertion)
sebagai anggota list pada posisi sembarang (di mana saja).
File,
merupakan salah satu contoh dari daftar linear yang elemen-elemennya
berupa record. Selain file, contoh lain dari daftar linear adalah
stack atau tumpukan, queue atau antrean, dan daftar berkait
atau linear linked list atau one- way list.
OPERASI PADA STACK
Terdapat empat operasi pada stack,
yakni CREATE (stack), ISEMPTY(stack), PUSH(elemen, stack),
dan POP (stack). CREATE(S) adalah operator yang menyebabkan stack S
menjadi satu stack hampa. Jadi NOEL(CREATE(S)) adalah 0, dan TOP(CREATE(S))
tak terdefinisi.
Sedangkan operator ISEMPTY(S) bermaksud
memeriksa apakah stack S hampa atau tidak. Operandnya adalah data
bertipe stack, sedangkan hasilnya merupakan data bertipe boolean.
ISEMPTY(S) adalah true, jika S hampa, yakni bila NOEL(S) = 0, dan
false dalam hal lain. Jelas bahwa ISEMPTY(CREATE(S)) adalah true.
Operator PUSH (E,S) akan bekerja
menambahkan elemen E pada stack S. E ditempatkan sebagai TOP(S).
Operator POP(S) merupakan operator yang bekerja mengeluarkan elemen TOP(S) dari
dalam stack. POP(S) akan mengurangi nilai NOEL(S) dengan 1. Suatu
kesalahan akan terjadi apabila, kita mencoba melakukan POP(S) terhadap stack
S yang hampa.
Kesalahan
overflow akan terjadi jika kita melakukan operasi pemasukan data (PUSH)
pada stack yang sudah penuh (dalam hal ini jika banyaknya elemen yang
kita masukkan ke dalam sebuah stack sudah melampaui batas kemampuan
memori atau telah didefinisikan sebelumnya). Sebaliknya,
kesalahan underflow akan terjadi jika stack sudah dalam keadaan
hampa, kita lakukan operasi pengeluaran atau penghapusan (POP).
DEKLARASI STACK
Meskipun
stack amat luas digunakan, banyak bahasa pemrograman tidak mempu-nyai
tipe data stack secara built-in. Dalam hal ini, Pemrogram harus
memanipulasi sendiri fasilitas yang dimiliki bahasa pemrograman tersebut, untuk
dapat melakukan operasi stack terhadap variabel stack.
Mungkin
cara yang paling sederhana adalah membentuk stack dalam bentuk se-macam array.
Jelas kita harus membedakan suatu stack dengan suatu array yang
sesungguhnya. Pemrogram harus memaksakan berlakunya aturan LIFO bagi stack.
Selain itu juga, penempatan stack dalam bentuk array
mengakibatkan suatu keterbatasan, yakni bahwa elemen stack harus
homogen. Keterbatasan lain yang timbul adalah keharusan Pemrogram untuk
menentukan batas atas dari subscript array , walaupun stack
secara teori tidak memiliki batas maksimum dalam jumlah elemen. Jika
diinginkan, seharusnya kita dapat membuat stack yang panjangnya tak
hingga.
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.
APLIKASI STACK
Stack sangat luas pemakaiannya dalam menyelesaikan berbagai macam
problema. Kompilator, sistem operasi, dan berbagai program aplikasi
banyak menggunakan konsep stack tersebut. Salah satu contoh adalah
problema Penjodohan Tanda Kurung atau matching parantheses.
Sebuah kompilator mempunyai tugas,
salah satu di antaranya adalah menyelidiki apakah Pemrogram telah dengan cermat
mengikuti aturan tata bahasa, atau sintaks dari bahasa pemrograman yang
bersangkutan. Misalnya untuk parantheses kiri (tanda kurung buka) yang
diberikan, harus dipastikan adanya parantheses kanan (tanda kurung
tutup) yang bersangkutan.
Stack dapat digunakan dalam prosedur
matching yang digunakan. Algoritmanya sederhana, kita amati barisan
elemen dari kiri ke kanan. Bila kita bertemu dengan suatu parantheses kiri,
maka parantheses kiri tersebut kita PUSH ke dalam sebuah stack.
Selanjutnya bila kita bertemu dengan suatu parantheses kanan, kita
periksa stack, apakah hampa atau tidak. Kalau stack hampa,
berarti terdapat parantheses kanan tanpa adanya parantheses kiri.
Suatu kesalahan, atau error, apabila stack tidak hampa, berarti
tidak diperoleh sepasang parantheses kiri, dan kanan, kita POP
elemen ke luar stack.