MAKALAH STRUKTUR DATA MAKALAH STRUKTUR DATA
“
“
STACK (TUMPUKAN) STACK (TUMPUKAN)
””Disusun oleh : Disusun oleh :
Kelas B Kelas B
1.
1. OKTA OKTA CITRA CITRA ZULYANTI ZULYANTI (KETUA) (KETUA) 2015-31-0332015-31-033 2.
2. IRSANDI IRSANDI NUGRAHA NUGRAHA S. S. (MAKALAH) (MAKALAH) 2015-31-0052015-31-005 3.
3. NOER ARBIAN NISY NOER ARBIAN NISYA (PPT ) A (PPT ) 2015-31-0192015-31-019 4.
4. NUR AMALYA R. NUR AMALYA R. (MAKALAH ) (MAKALAH ) 2015-31-0212015-31-021 5.
5. MUHAMMAD MUHAMMAD SUHARTO SUHARTO (PPT) (PPT) 2015-31-0252015-31-025 6.
6. RIZZAL RIZZAL IKHSAN IKHSAN M. M. (PPT (PPT ) ) 2015-31-0622015-31-062 7.
7. TITIS TITIS FAYA FAYA Q. Q. (PPT) (PPT) 2015-31-0732015-31-073 8.
8. RAMA RAMA DESI DESI W. W. S. S. (PPT) (PPT) 2015-31-0812015-31-081 9.
9. HENNY HENNY HALIMAH HALIMAH L. L. (MAKALAH) (MAKALAH) 2015-31-0872015-31-087 10.
10. AHMAD AHMAD RIYANA RIYANA S. S. (PPT) (PPT) 2015-31-1032015-31-103
SEKOLAH TINGGI TEKNIK PLN SEKOLAH TINGGI TEKNIK PLN
TAHUN AJARAN 2016/2017
TAHUN AJARAN 2016/2017
KATA PENGANTAR KATA PENGANTAR
Puji syukur kehadirat Tuhan Yang Maha Esa
Puji syukur kehadirat Tuhan Yang Maha Esa yang telah memberikan rahmatyang telah memberikan rahmat dan hidayah kepada penulis, sehingga penulis dapat menyelesaikan makalah dan hidayah kepada penulis, sehingga penulis dapat menyelesaikan makalah mengenai STACK (Tumpukan). Makalah ini dibuat untuk memenuhi tugas mata mengenai STACK (Tumpukan). Makalah ini dibuat untuk memenuhi tugas mata kuliah Struktur Data.
kuliah Struktur Data.
Besar harapan penulis jika makalah ini dapat bermanfaat bagi semuanya Besar harapan penulis jika makalah ini dapat bermanfaat bagi semuanya agar bisa menambah pengetahuan dan wawasan pembaca di bidang teknologi, agar bisa menambah pengetahuan dan wawasan pembaca di bidang teknologi, informasi dan komunikasi.
informasi dan komunikasi.
Kami sadar bahwa makalah ini masih jauh dari kata sempurna, oleh karena Kami sadar bahwa makalah ini masih jauh dari kata sempurna, oleh karena itu kritik dan saran yang membangun sangat diperlukan untuk membuat makalah itu kritik dan saran yang membangun sangat diperlukan untuk membuat makalah ini menjadi lebih baik.
ini menjadi lebih baik.
Jakarta, 9 November 2016 Jakarta, 9 November 2016 Penulis,
Penulis,
Kelompok 2 Kelompok 2
DAFTAR ISI
Halaman
KATA PENGANTAR ... i
DAFTAR ISI ... ii
BAB I PENDAHULUAN 1.1 Latar Belakang ... 1
1.2 Rumusan Masalah... 1
1.3 Tujuan Pembelajaran ... 2
BAB II PEMBAHASAN 2.1 Pengertian Stack ... 3
2.2 Operasi pada Stack ... 3
2.3 Deklarasi Stack Dalam Pascal ... 4
2.4 Aplikasi Stack ... 5
2.4.1 Notasi Postfix ... 5
2.4.2 Notasi Infix ... 6
2.5 Contoh Program Stack Dalam Pascal ... 7
BAB III PENUTUP 3.1 Kesimpulan ... 20
3.2 Saran ... 20
3.3 Pertanyaan ... 21
DAFTAR PUSTAKA ... 22
BAB I
PENDAHULUAN
1.1 Latar Belakang
Struktur data adalah karakteristik yang terkait dengan sifat dan cara penyimpanan sekaligus penggunaan atau pengaksesan data. Karakteristik tersebut mengikat dan sekaligus secara timbal balik dipengaruhi oleh algoritma yang mengakses data tersebut, sehingga disebutkan Algoritma dan Struktur Data merupakan satu kesatuan. Salah satu teknik dasar t entang struktur data adalah stack (tumpukan) yang lebih lanjut akan dibahas dalam makalah ini.
1.2 Rumusan Masalah
Dari latar belakang masalah di atas, maka muncul rumusan masalah sebagai berikut.
1. Apa pengertian Stack?
2. Apa saja operasi pada Stack?
3. Bagaimana pendeklarasian Stack?
4. Apa saja aplikasi pada Stack?
5. Apa contoh program Stack dalam pascal?
1.3 Tujuan Penulisan
Sejalan dengan rumusan masalah di atas, makalah ini disusun dengan tujuan untuk mengetahui:
1. Definisi Stack 2. Operasi pada Stack 3. Pendeklarasian Stack 4. Aplikasi pada Stack
5. Contoh program Stack dalam Pascal
BAB II
PEMBAHASAN
2.1 Pengertian Stack
2.1.1 Daftar linear
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).
2.1.2 Stackatau tumpukan
Stack atau tumpukan adalah bentuk khusus dari linear list . Pada stack , penghapusan serta pemasukan elemennya hanya dapat dilakukan di satu posisi, yakni posisi akhir dari list . Posisi ini disebut puncak atau top dari stack . Elemen stack S pada posisi
ini dinyatakan dengan TOP(S).
Jelasnya, bila stack S [S1, S2, …, ST], maka TOP(S) adalah ST. Banyaknya elemen stack S pada suatu saat tertentu biasa kita sebut sebagai NOEL(S). Jadi untuk stack kita di atas, NOEL(S) = T. Seperti halnya pada semua linear list , pada stack
dikenal operasi penghapusan dan pemasukan.
Operator penghapusan elemen pada stack disebut POP, sedangkan operator pemasukan elemen, disebut PUSH. Untuk menggambarkan kerja kedua operator di atas, berikut ini suatu contoh bermula dari stack hampa S[ ], yang kita gambar sebagai:
S NOEL(S) = 0, TOP(S) tidak terdefinisi Mula-mula kita PUSH elemen A, diperoleh Stack S = [A]
A S NOEL(S) = 1, TOP(S) = A
Apabila kemudian kita PUSH elemen B, diperoleh Stack S = [A,B]
B NOEL(S) = 2, TOP(S) = B A S
Selanjutnya bila PUSH elemen C, diperoleh Stack S = [A,B,C]
C
B S NOEL(S) = 3, TOP(S) = B A
Kemudian bila kita POP elemen C, diperoleh Stack S = [A,B]
B S NOEL(S) = 2, TOP(S) = B A
Kita dapat pula PUSH 2 elemen D dan E. Akan dihasilkan Stack S = [A,B,D,E]
E D B
S NOEL(S) = 4, TOP(S) = E, dan seterusnya.
A
Terlihat bahwa kedua operasi di atas, pada stack adalah bersifat ‘terakhir masuk pertama keluar’ atau ‘last in first out (LIFO)’. Pada hakekatnya kita tidak membatasi berapa banyak elemen dapat masuk ke dalam stack . Untuk suatu stack S[S1, S2,..., S NOEL], kita katakan bahwa elemen Si, berada di atas elemen S j, jika i lebih besar dari j. Suatu elemen tidak dapat kita POP ke luar, sebelum semua elemen di atasnya dikeluarkan.
2.2 Operasi pada Stack
Terdapat empat operasi pada stack , yakni CREATE( stack ), ISEMPTY( stack ), PUSH(elemen, stack ), dan POP ( stack ).
1. CREATE
Adalah operator yang menunjukkan suatu stack kosong dengan nama S. Jadi : NOEL(CREATE(S)) = 0
TOP(CREATE(S)) adalah TIDAK TERDEFINISI.
2. ISEMPTY
Adalah operator yang menentukan apakah stack S kosong.
Operandnya terdiri dari type data stack. Hasilnya merupakan type
data Boolean: ISEMPTY(S) = True. Jika S hampa, yakni bila NOEL(S) = 0.
3. PUSH
Adalah operator yang menambahkan elemen E pada puncak stack S. Hasilnya merupakan stack yang lebih besar.
PUSH(E,S). E ditempatkan sebagai TOP(S).
4. POP (stack)
Adalah operator yang menghapus sebuah elemen dari puncak stack S. Hasilnya merupakan stack yang lebih
kecil.
POP(S) mengurangi NOEL(S)
POP(CREATE(S)) kondisi error
POP(PUSH(E,S)) = S
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).
2.3 Deklarasi Stack dalam Pascal
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 takhingga.
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.
Sekarang marilah kita bicarakan deklarasi dari vari abel S yang bertipe data stack . Diasumsikan bahwa elemen dari S masing-masing bertipe data integer dan panjang stack maksimum adalah 100 elemen.
Kita mendeklarasikan sebuah array yang dilengkapi dengan variabel TOP-PTR.
Variabel TOP-PTR ini menyatakan subscript dari elemen TOP(S) dari stack . Kita menamakan kombinasi dari array dan indikator untuk TOP tersebut dengan nama STACK-STRUC. Dengan penyajian seperti ini, berlaku bahwa NOEL(S) = TOP-PTR,
ISEMPTY(S) adalah true bila TOP-PTR = 0, dan false bila TOP-PTR lebih besar dari 0.
Dalam Pascal
type stackstruct;
record stack: array[1..100[of integer;
top-ptr : integer end
var S : stackstruct;
Kompilator tidak dapat mengerti aturan LIFO yang kita
inginkan. Untuk itu Pem- rogram harus berhati-ati dan tidak memberi indeks pada S di sembarang tempat, selain dengan nilai TOP-PTR.
Operasi PUSH dan POP dapat kita program sebagai berikut : kita gunakan EON untuk menyatakan elemen yang di-PUSH ke dalam S dan EOFF untuk elemen yang di-POP ke luar S. NOEL-MAX menyatakan panjang maksimum stack . Jadi di sini NOEL-MAX = 100.
Dalam procedure Pascal :
procedure PUSH (eon : integer); begin if (s.topptr < noelmax) then
begin s.topptr <= s.topptr + 1; s.stack [s.topptr] := eon end
else OVERFLOW-CONDITION end;
procedure POP (var eoff : integer); begin if (s.topptr > 0) then
begin eoff := s.Stack(s.topptr);
s.topptr := s.topptr-1 end
else UNDERFLOW-CONDITION end;
2.4 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