STACK

n LINEAR LIST
    Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal
didefinisikan suatu linear list A yang terdiri atas T buah elemen sebagai berikut :

                                     A = [a1, a2, .........., aT]

Jika T = 0, maka A dikatakan sebagai “Null List”.
Suatu elemen dari sembarang posisi pada linear list A dapat dihilangkan. Sebaliknya, suatu
elemen baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada
list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap saat.

n DEFINISI STACK
  Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan
penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang
disebut sebagai “TOP”.
Misal diberikan Stack S sebagai berikut :

                   S = [ S1, S2, .........., ST ] à maka TOP(S) = ST.

    Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack
di atas, maka NOEL(S) = T. Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D],
maka stack S ini dapat digambarkan sebagai berikut :

                                 A                A    B    C       D
               D         Top     B
                                                                    Top
               C                 C
               B                 D          Top             D       C     B   A
               A
                                                            Top




n OPERASI DASAR PADA STACK
   Ada empat operasi dasar yang didefinisikan pada stack, yaitu :
   1. CREATE(stack)
   2. ISEMPTY(stack)
   3. PUSH(elemen,stack)

                                                                                       19
4. POP(stack)


m CREATE
   Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa :

            NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null



m ISEMPTY
   Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong.
Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
       ISEMPTY(S) = true, jika S adalah stack kosong
                      = false, jika S bukan stack kosong
   atau
       ISEMPTY(S) = true, jika NOEL(S) = 0
                      = false, jika NOEL(S) ≠ 0

   Catatan : ISEMPTY(CREATE(S)) = true.



m PUSH
    Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang
digunakan adalah :

       PUSH(E,S)

   Artinya : menambahkan elemen E ke dalam stack S.

   Elemen yang baru masuk ini akan menempati posisi TOP.
   Jadi : TOP(PUSH(E,S)) = E.
   Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S)
menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).



m POP
   Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :
              POP(S)
    Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP.
Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan
elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada
stack kosong, artinya :

                                                                                     20
POP(CREATE(S)) = error condition

Catatan : TOP(PUSH(E,S)) = E


n DEKLARASI STACK PADA BAHASA PEMROGRAMAN
    Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah
array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda.
Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S
adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk
mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain
yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan
untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya
gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan
bahwa :

          NOEL(S) = TOP_PTR
          ISEMPTY(S) = TRUE, jika TOP_PTR = 0 dan
                       FALSE, jika TOP_PTR > 0.

Maka bentuk deklarasinya dalam PASCAL adalah :

          TYPE Stack_Struct = Record
                                Stack : array[1..100] of integer;
                                TopPtr : integer;
                              End;
          VAR S : Stack_Struct;

Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur
tersendiri, yaitu :




          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(Eoff : integer);
          Begin
             If (S.TopPtr > 0) Then Begin
                                                                                    21
Eoff := S.Stack[S.TopPtr];
                                    S.TopPtr := S.TopPtr - 1
                                  End
                             Else Underflow_Condition
           End;

Catatan :
Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack
dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP
terhadap stack kosong. Eon adalah elemen yang akan dimasukkan ke dalam stack dan
Eoff adalah elemen yang akan dikeluarkan dari dalam stack.


n PENGGUNAAN/APLIKASI STACK
     Logika stack digunakan untuk menyelesaikan berbagai macam masalah. Antara lain
digunakan pada compiler, operating system dan dalam program-program aplikasi. Berikut
ini tiga buah contoh aplikasi stack, yaitu :

m MATCHING PARENTHESES
    Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang
terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat
prosesnya. Algoritma yang digunakan adalah :

1. Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke kanan.
2. Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut di-push ke
   dalam stack.
3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa.
   Ÿ Jika stack kosong à terjadi kesalahan.
       berarti : ada simbol ")", tetapi tidak ada simbol "(" yang seharusnya mendahului.
   Ÿ Jika stack tidak kosong à artinya ada pasangannya dan langsung di-POP keluar
       stack.

Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string. Berikut ini
bentuk flowchart (logika proses) yang digunakan pada proses matching ini :




                                                                                     22
position NEXT CHAR
                 at end of string


                                  y     stack           y
                     end of
                                        empty                    valid syntax
                     string

                                             n
                         n
                                  invalid syntax(unclosed left
                                                                           done
                                         parenthesis)

                              y
                     found                 push "("
                       "("                on to stack

                         n


                                  y     stack       y       invalid syntax(unclosed left
                     found
                                        empty                      parenthesis)
                       ")"

                                             n
                         n
                                       pop stack                        done

             increament NEXT CHAR to
               next character in string



m NOTASI POSTFIX
    Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke
dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu
ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh
compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam
bentuk/notasi postfix.

Contoh :
Misal diberikan ekspresi aritmatik : A + B ;
Maka bentuknya dalam notasi postfix menjadi : AB+
Urutan (prioritas) dari operator adalah :
   1. Perpangkatan (^)
   2. Perkalian (*) atau Pembagian (/)
   3. Penjumlahan (+) atau Pengurangan (-)


Aturan yang digunakan dalam proses transformasi tersebut adalah :
1. Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan.
2. Bila simbol yang di-scan adalah "(", maka simbol tersebut di push ke dalam stack.

                                                                                           23
3. Bila simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar mulai dari
   simbol "(" yang pertama ditemukan dalam stack.
4. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol
   (operator) yang berada pada posisi top dalam stack.
   a. Jika derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top,
       maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke
       dalam stack.
   b. Jika derajatnya lebih tinggi dari simbol yang berada pada posisi top, maka simbol
       (operator) yang di-scan tersebut di-push ke dalam stack.
5. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai
   output.
6. Bila simbol adalah ";" maka seluruh isi stack di-pop sebagai output.

Contoh :
Misal diberikan sebuah ekspresi aritmatik dengan bentuk sbb:

         ( (A + B) * C / D + E ^ F ) / G ;

Selanjutnya akan dicari bentuk ekspresi diatas dalam notasi postfix.
Proses yang dilakukan dapat digambarkan dalam tabel berikut :

Urutan 1 2 3 4 5 6 7               8 9 10 11 12 13 14 15 16 17 18
Proses
Simbol
Yang di
Scan       A + B   *               C         D   +   E   ^    F            G
Top          + +   *               *             +   +   ^    ^
                                                         +    +

Output           A      B +        C * D             E        F   ^+       G

Jadi ekspresi aritmatik : ( ( A + B ) * C / D + E^F ) / G ;
dalam notasi postfix menjadi : AB+D*C/EF^+G/

n PROSES REKURSIF
   Stack juga dapat digunakan untuk menelurusuri suatu program atau procedure
   yang rekursif.

   Berikut ini sebuh contoh yang menyelesaikannya menggunakan proses rekursif.




                                                                                    24
Persoalan :
    Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan
    datang, berapakah banyak uang yang harus didepositokan saat ini. dianggap
    bahwa tingkat bunga tidak berubah selama 25 yahun yaitu sebesar 8%
    per_tahun.

   Penyelesaian :
       Untuk menyelesaikan masalah ini akan digunakan logika stack yatiu :
   - pada tahun ke-25 jumlah uang = Rp. 1.000.000,-
   - pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
   - pada tahun ke-23 jumlah uang =
          .
        dst

Berikut ini sebuh program PASCAL yang mengandung suatu procedure rekursif
untuk menghitung jumlah uang diinginkan.

   PROGRAM DEPOSITO ;
   CONST Goal = 1000000;
         Rate = 0.08;
   VAR   Ju : Real;
         Thn: Integer;

   PROCEDURE Hitung (VAR Thn : Integer);
   BEGIN
     IF (Thn > 0) THEN
                  BEGIN
                         Ju := Ju/(1.0 + Rate);
                         Thn := Thn - 1;
                         Hitung(Thn);
                  END;
     END;
   BEGIN
     Thn := 25;
     Ju := Goal;
     HITUNG(Thn);
     WRITE(Ju);
   END.
Pemanggilan pertama procedure HITUNG dimana nilai Thn =25




Top       9
                                                                             25
Pemanggilan kedua procedure HITUNG dimana nilai Thn = 24



Top         5

            9

Pemanggilan ketiga procedure HITUNG, dimana nilai Thn = 23



Top             5
                5

                9

Setelah 25 kali pemanggilan procedure HITUNG keadaan stack adalah :


Top             5
                5

                        24 kali pemanggilan
                5       statement langkah ke 5
                5

                9




n MAPPING KE STORAGE DARI STACK
   Bentuk mapping ke storage dari stack yang paling sederhana adalah dengan
menggunakan pendekatan array satu dimensi. Hal ini karena sarana yang
digunakan untuk menyatakan suatu stack adalah array.
   Jika diberikan stack S dengan m elemen maka bentuk mappingnya seperti
mapping array satu dimensi dengan m elemen.




                                                                        26
batas/start struktur data lain
      start               TOP
                          elemen
      stack S

Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah
maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam
dengan bentuk sbb:




                         start S2
start S1     TOP S1                    TOP S2         start
           (sementara)               (sementara)   struktur data lain


Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2
tidak penuh pada saat yang bersamaan.

Cara dianggap lebih baik adalah :
Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu,
    misal N.

    NOEL(S1) + NOEL(S2) <= N

Maka bentuk mapping yang digunakan adalah :




start s1       TOP s1                  TOP s2         start s2
            (sementara)             (sementara)




                                                                            27
batas/start struktur data lain
      start               TOP
                          elemen
      stack S

Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah
maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam
dengan bentuk sbb:




                         start S2
start S1     TOP S1                    TOP S2         start
           (sementara)               (sementara)   struktur data lain


Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2
tidak penuh pada saat yang bersamaan.

Cara dianggap lebih baik adalah :
Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu,
    misal N.

    NOEL(S1) + NOEL(S2) <= N

Maka bentuk mapping yang digunakan adalah :




start s1       TOP s1                  TOP s2         start s2
            (sementara)             (sementara)




                                                                            27

More Related Content

PDF
3 stack2
PDF
Perkuliahan ke 4 Struktur Data
PPT
Pertemuan 4 ok
PPT
Pertemuan 6 ok
PDF
Materi kuliah teknik pengaturan transformasi laplace
PPT
Fungsi rekursif, queue, stack
PDF
Bab viii stack
PDF
Algoritma dan Struktur Data - Stack
3 stack2
Perkuliahan ke 4 Struktur Data
Pertemuan 4 ok
Pertemuan 6 ok
Materi kuliah teknik pengaturan transformasi laplace
Fungsi rekursif, queue, stack
Bab viii stack
Algoritma dan Struktur Data - Stack

What's hot (20)

PDF
Stack
PDF
Algoritma dan Struktur Data - tumpukan
PPTX
CFG dan PARSING - P 5 - Teknik Kompilasi
PPT
Algoritma Pemrograman - Operator
PPTX
Struktur data
PDF
Pertemuan 5 revisijan2013-mhs
PPT
Tistrukdat4
PPTX
PDF
Bab 8-stack-dan-queue
PPT
Bab 4 queue (antrian)
PDF
PPT
5. cf dan parsing
PDF
Pertemuan 5 Stack atau Tumpukan
PDF
Stack tumpukan
PPTX
Stack tumpukan
PDF
Algoritma dan Struktur Data - antrian
DOCX
Resume praktikum 6 stack
PDF
Queue antrian
PPT
Stack Linier
DOCX
Stack
Algoritma dan Struktur Data - tumpukan
CFG dan PARSING - P 5 - Teknik Kompilasi
Algoritma Pemrograman - Operator
Struktur data
Pertemuan 5 revisijan2013-mhs
Tistrukdat4
Bab 8-stack-dan-queue
Bab 4 queue (antrian)
5. cf dan parsing
Pertemuan 5 Stack atau Tumpukan
Stack tumpukan
Stack tumpukan
Algoritma dan Struktur Data - antrian
Resume praktikum 6 stack
Queue antrian
Stack Linier
Ad

Similar to Stack (20)

PPT
Pertemuan_4,5_Stack(Tumpukan....) (2).ppt
PPT
Bab 4 stack_tumpukan_
PDF
Stack_Queue.pdf
DOCX
Laporan praktikum modul viii
PPTX
Stack tumpukan
PPTX
Pert.6 stack
PPT
Bab 4 stack (tumpukan)
PPT
Bab 3 stack (tumpukan)
PPT
1_4_STACK_TUMPUKeeAeweweweweweweN_PPT.ppt
PPT
Struktur data 03 (stack)
PPTX
Slide minggu 2 pertemuan 2 (struktur data1)
PPTX
STACK.pptx
PPT
Materi Struktur Data Stack
PDF
Ifc modul 6 (stack)
PPT
Tipe data Stack magi mahasiswa Teknik Informatika.ppt
PPTX
P4 - STACK - Algoritma dan Struktur Data.pptx
PPTX
Stack atau tumpukan
PDF
STACK .pdf
PPT
data stack tugas sekolah sma dan kawan kaan.ppt
PPT
data stack liana dan kawan kawan sekolah.ppt
Pertemuan_4,5_Stack(Tumpukan....) (2).ppt
Bab 4 stack_tumpukan_
Stack_Queue.pdf
Laporan praktikum modul viii
Stack tumpukan
Pert.6 stack
Bab 4 stack (tumpukan)
Bab 3 stack (tumpukan)
1_4_STACK_TUMPUKeeAeweweweweweweN_PPT.ppt
Struktur data 03 (stack)
Slide minggu 2 pertemuan 2 (struktur data1)
STACK.pptx
Materi Struktur Data Stack
Ifc modul 6 (stack)
Tipe data Stack magi mahasiswa Teknik Informatika.ppt
P4 - STACK - Algoritma dan Struktur Data.pptx
Stack atau tumpukan
STACK .pdf
data stack tugas sekolah sma dan kawan kaan.ppt
data stack liana dan kawan kawan sekolah.ppt
Ad

Stack

  • 1. STACK n LINEAR LIST Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear list A yang terdiri atas T buah elemen sebagai berikut : A = [a1, a2, .........., aT] Jika T = 0, maka A dikatakan sebagai “Null List”. Suatu elemen dari sembarang posisi pada linear list A dapat dihilangkan. Sebaliknya, suatu elemen baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap saat. n DEFINISI STACK Stack adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”. Misal diberikan Stack S sebagai berikut : S = [ S1, S2, .........., ST ] à maka TOP(S) = ST. Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack di atas, maka NOEL(S) = T. Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat digambarkan sebagai berikut : A A B C D D Top B Top C C B D Top D C B A A Top n OPERASI DASAR PADA STACK Ada empat operasi dasar yang didefinisikan pada stack, yaitu : 1. CREATE(stack) 2. ISEMPTY(stack) 3. PUSH(elemen,stack) 19
  • 2. 4. POP(stack) m CREATE Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa : NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null m ISEMPTY Operator ini berfungsi untuk menentukan apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut : ISEMPTY(S) = true, jika S adalah stack kosong = false, jika S bukan stack kosong atau ISEMPTY(S) = true, jika NOEL(S) = 0 = false, jika NOEL(S) ≠ 0 Catatan : ISEMPTY(CREATE(S)) = true. m PUSH Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah : PUSH(E,S) Artinya : menambahkan elemen E ke dalam stack S. Elemen yang baru masuk ini akan menempati posisi TOP. Jadi : TOP(PUSH(E,S)) = E. Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false). m POP Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya : POP(S) Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya : 20
  • 3. POP(CREATE(S)) = error condition Catatan : TOP(PUSH(E,S)) = E n DEKLARASI STACK PADA BAHASA PEMROGRAMAN Dalam bahasa pemrograman, untuk menempatkan stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa : NOEL(S) = TOP_PTR ISEMPTY(S) = TRUE, jika TOP_PTR = 0 dan FALSE, jika TOP_PTR > 0. Maka bentuk deklarasinya dalam PASCAL adalah : TYPE Stack_Struct = Record Stack : array[1..100] of integer; TopPtr : integer; End; VAR S : Stack_Struct; Selanjutnya, untuk keperluan operasi PUSH dan POP harus dibuat suatu prosedur tersendiri, yaitu : 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(Eoff : integer); Begin If (S.TopPtr > 0) Then Begin 21
  • 4. Eoff := S.Stack[S.TopPtr]; S.TopPtr := S.TopPtr - 1 End Else Underflow_Condition End; Catatan : Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack kosong. Eon adalah elemen yang akan dimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack. n PENGGUNAAN/APLIKASI STACK Logika stack digunakan untuk menyelesaikan berbagai macam masalah. Antara lain digunakan pada compiler, operating system dan dalam program-program aplikasi. Berikut ini tiga buah contoh aplikasi stack, yaitu : m MATCHING PARENTHESES Proses ini dilakukan compiler untuk memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik. Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang digunakan adalah : 1. Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke kanan. 2. Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut di-push ke dalam stack. 3. Jika ditemukan simbol ")" atau "Right parenthesis", maka isi stack diperiksa. Ÿ Jika stack kosong à terjadi kesalahan. berarti : ada simbol ")", tetapi tidak ada simbol "(" yang seharusnya mendahului. Ÿ Jika stack tidak kosong à artinya ada pasangannya dan langsung di-POP keluar stack. Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string. Berikut ini bentuk flowchart (logika proses) yang digunakan pada proses matching ini : 22
  • 5. position NEXT CHAR at end of string y stack y end of empty valid syntax string n n invalid syntax(unclosed left done parenthesis) y found push "(" "(" on to stack n y stack y invalid syntax(unclosed left found empty parenthesis) ")" n n pop stack done increament NEXT CHAR to next character in string m NOTASI POSTFIX Bentuk aplikasi stack yang lain adalah mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi dalam bentuk/notasi postfix. Contoh : Misal diberikan ekspresi aritmatik : A + B ; Maka bentuknya dalam notasi postfix menjadi : AB+ Urutan (prioritas) dari operator adalah : 1. Perpangkatan (^) 2. Perkalian (*) atau Pembagian (/) 3. Penjumlahan (+) atau Pengurangan (-) Aturan yang digunakan dalam proses transformasi tersebut adalah : 1. Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan. 2. Bila simbol yang di-scan adalah "(", maka simbol tersebut di push ke dalam stack. 23
  • 6. 3. Bila simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar mulai dari simbol "(" yang pertama ditemukan dalam stack. 4. Bila simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol (operator) yang berada pada posisi top dalam stack. a. Jika derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top, maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke dalam stack. b. Jika derajatnya lebih tinggi dari simbol yang berada pada posisi top, maka simbol (operator) yang di-scan tersebut di-push ke dalam stack. 5. Bila simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai output. 6. Bila simbol adalah ";" maka seluruh isi stack di-pop sebagai output. Contoh : Misal diberikan sebuah ekspresi aritmatik dengan bentuk sbb: ( (A + B) * C / D + E ^ F ) / G ; Selanjutnya akan dicari bentuk ekspresi diatas dalam notasi postfix. Proses yang dilakukan dapat digambarkan dalam tabel berikut : Urutan 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Proses Simbol Yang di Scan A + B * C D + E ^ F G Top + + * * + + ^ ^ + + Output A B + C * D E F ^+ G Jadi ekspresi aritmatik : ( ( A + B ) * C / D + E^F ) / G ; dalam notasi postfix menjadi : AB+D*C/EF^+G/ n PROSES REKURSIF Stack juga dapat digunakan untuk menelurusuri suatu program atau procedure yang rekursif. Berikut ini sebuh contoh yang menyelesaikannya menggunakan proses rekursif. 24
  • 7. Persoalan : Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan datang, berapakah banyak uang yang harus didepositokan saat ini. dianggap bahwa tingkat bunga tidak berubah selama 25 yahun yaitu sebesar 8% per_tahun. Penyelesaian : Untuk menyelesaikan masalah ini akan digunakan logika stack yatiu : - pada tahun ke-25 jumlah uang = Rp. 1.000.000,- - pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8) - pada tahun ke-23 jumlah uang = . dst Berikut ini sebuh program PASCAL yang mengandung suatu procedure rekursif untuk menghitung jumlah uang diinginkan. PROGRAM DEPOSITO ; CONST Goal = 1000000; Rate = 0.08; VAR Ju : Real; Thn: Integer; PROCEDURE Hitung (VAR Thn : Integer); BEGIN IF (Thn > 0) THEN BEGIN Ju := Ju/(1.0 + Rate); Thn := Thn - 1; Hitung(Thn); END; END; BEGIN Thn := 25; Ju := Goal; HITUNG(Thn); WRITE(Ju); END. Pemanggilan pertama procedure HITUNG dimana nilai Thn =25 Top 9 25
  • 8. Pemanggilan kedua procedure HITUNG dimana nilai Thn = 24 Top 5 9 Pemanggilan ketiga procedure HITUNG, dimana nilai Thn = 23 Top 5 5 9 Setelah 25 kali pemanggilan procedure HITUNG keadaan stack adalah : Top 5 5 24 kali pemanggilan 5 statement langkah ke 5 5 9 n MAPPING KE STORAGE DARI STACK Bentuk mapping ke storage dari stack yang paling sederhana adalah dengan menggunakan pendekatan array satu dimensi. Hal ini karena sarana yang digunakan untuk menyatakan suatu stack adalah array. Jika diberikan stack S dengan m elemen maka bentuk mappingnya seperti mapping array satu dimensi dengan m elemen. 26
  • 9. batas/start struktur data lain start TOP elemen stack S Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam dengan bentuk sbb: start S2 start S1 TOP S1 TOP S2 start (sementara) (sementara) struktur data lain Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2 tidak penuh pada saat yang bersamaan. Cara dianggap lebih baik adalah : Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu, misal N. NOEL(S1) + NOEL(S2) <= N Maka bentuk mapping yang digunakan adalah : start s1 TOP s1 TOP s2 start s2 (sementara) (sementara) 27
  • 10. batas/start struktur data lain start TOP elemen stack S Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing dengan jumlah maksimum elemennya adalah M dan N, maka kedua stack ini dialokasikan dalam dengan bentuk sbb: start S2 start S1 TOP S1 TOP S2 start (sementara) (sementara) struktur data lain Konsep mapping seperti diatas dianggap tidak efisien, terutama jika S1 dan S2 tidak penuh pada saat yang bersamaan. Cara dianggap lebih baik adalah : Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi jumlah tertentu, misal N. NOEL(S1) + NOEL(S2) <= N Maka bentuk mapping yang digunakan adalah : start s1 TOP s1 TOP s2 start s2 (sementara) (sementara) 27