1




                         Stack
Nurdiansah PTIK 09 UNM               10/12/2012
Deskripsi stack
                                2

ď‚— Salah satu konsep yang efektif untuk menyimpan
  dan mengambil data adalah LIFO (Last In First Out)
  dimana pengambilan data akan berkebalikan
  urutannya dengan penyimpanan data.
ď‚— Stack adalah kumpulan data dimana data yang
  diletakkan di atas data yang lain. Stack adalah
  struktur data yang menggunakan konsep LIFO.




Nurdiansah PTIK 09 UNM                         10/12/2012
Cont‟…
                         3

ď‚— Elemen terakhir yang disimpan dalam stack menjadi
  elemen pertama yang diambil.
ď‚— Dalam proses komputasi, untuk meletakkan sebuah
  elemen pada bagian atas dari stack, maka kita
  melakukan PUSH. Sebaliknya, untuk memindahkan
  dari tempat yang di atas tersebut kita melakukan
  POP.




Nurdiansah PTIK 09 UNM                        10/12/2012
Contoh
                                 4
ď‚— Ada dua buah kotak yang            ď‚— Ilustrasi sebuah stack
  kita tumpuk, sehingga kotak
  diletakkan di atas kotak
  yang lain. Jika kemudian
  stack dua buah kotak
  tersebut kita tambah dengan
  kotak ketiga dan seterusnya,
  maka akan kita peroleh
  sebuah stack kotak, yang
  terdiri dari N kotak.
ď‚— Stack merupakan kumpulan
  data yang bersifat dinamis
  artinya bisa dilakukan
  penambahan atau
  pengambilan data darinya.
Nurdiansah PTIK 09 UNM                                          10/12/2012
Penyajian stack
                          5

ď‚— Stack dapat diuraikan dengan menggunakan array,
  dengan anggapan bahwa banyaknya elemen
  maksimum dari stack tersebut tidak akan melebihi
  batas maksimum banyaknya elemen dalam array.
ď‚— Penambahan data pada stack harus dibatasi
  berdasarkan ukuran stack untuk menghindari
  overflow.
ď‚— Perlu data tambahan untuk mencatat posisi ujung
  stack.


Nurdiansah PTIK 09 UNM                        10/12/2012
Cont‟…
                            6

ď‚— Stack dapat disajikan dengan menggunakan tipe
  data struktur (struct) yang terdiri dari dua field.
ď‚— Field pertama bertipe array untuk menyimpan
  elemen stack.
ď‚— Field kedua bertipe integer untuk mencatat posisi
  ujung stack.




Nurdiansah PTIK 09 UNM                            10/12/2012
Deklarasi stack
                          7


#define MAXSTACK 100
typedef int ItemType;
/*defenisi struktur stack*/
typedef struct {
      int Item[MAXSTAXK];
/*Array yang berisi data tumpukan*/
     int Count;
/*menunjukkan indeks data paling atas dari stack */
} Stack;

Nurdiansah PTIK 09 UNM                         10/12/2012
Operasi pada stack
                           8
Operasi-operasi dasar pada stack sbb :
1. Operasi menciptakan T sebagai stack kosong
      void InitializeStack (Stack *S)
      {
             S -> Count = 0;
      }
2. Fungsi yang melakukan pengecekan apakah stack dalam
kondisi kosong
      int Empty(Stack *S)
      {
             return (S -> Count ==0);
      }
Nurdiansah PTIK 09 UNM                          10/12/2012
3. Fungsi yang melakukan pengecekan apakah stack dalam kondisi
 penuh
        int Full (Stack *S)
        {
                  return (S ->Count == MAXSTACK);
        }
 4. Operasi menyisipkan elemen x ke stack T dan mengembalikan stack
 baru
        void Push(ItemType x, Stack *S)
        {
            if (Full)
                  printf(“Stack penuh! Data tidak dapat masuk!”);
            else
                  {
                  S -> Item[S-> Count] = x;
                  ++ (S -> Count);

                         }
            }
Nurdiansah PTIK 09 UNM          9                          10/12/2012
Cont‟…
                           10

5. Operasi mengambil elemen puncak stack T, (pop(T,x))
   void Pop (Stack *S, ItemType *x)
   {
       if (Empty)// stack kosong
             printf (“Stack masih kosong!”);
       else
       {
             -- (S -> Count);
             * x = S -> Item [S -> Count];
             S -> Item[S -> Count] = 0;
       }
    }
Nurdiansah PTIK 09 UNM                            10/12/2012
Operasi Push
                         11

ď‚— Fungsi tersebut menyiapkan tempat untuk x yang
  akan dipush ke dalam tumpukan, yaitu dengan
  menambah nilai S ->Count dengan 1 dan kemudian
  menyisipkan x ke dalam S-> Item.
ď‚— Cara memanggil prosedur di atas adalah sbb :
      x=5;
      Push(x, &tum);




Nurdiansah PTIK 09 UNM                       10/12/2012
Operasi Pop
                          12

ď‚— Operasi POP adalah operasi untuk menghapus
  elemen yang terletak pada posisi paling atas dari
  sebuah tumpukan.
ď‚— Cara pemanggilan satu data prosedur POP adalah
  sbb :
  /*mengambil satu data dari tumpukan*/
  hasil= pop (&tum);
   printf(„Data %d hasil pengambilan dari
   tumpukan : “, hasil);

Nurdiansah PTIK 09 UNM                          10/12/2012
Notasi Infix
                          13

ď‚— Notasi Infix adalah cara penulisan ungkapan dimana
  operator ditulis di antara dua operand.
ď‚— Contoh Notasi Infix : Penulisan ungkapan numeris
  dimana tanda kurung digunakan untuk
  mengelompokkan bagian mana yang akan dikerjakan
  terlebih dahulu.
ď‚— Contoh : (A+B) * (C-D)
  Suku (A+B) akan dikerjakan terlebih dahulu,
   kemudian suku (C-D), dan terakhir mengalikan hasil
   yang diperoleh dari kedua suku tersebut

Nurdiansah PTIK 09 UNM                         10/12/2012
Cont‟…
                           14

ď‚— Bandingkan dengan ungkapan : A+B*C-D
    Pada ungkapan ini B*C akan dikerjakan terlebih
    dahulu, diikuti yang lain.
    Dapat disimpulkan bahwa pemakaian tanda kurung
    mempengaruhi hasil akhir.
    Semakin rumit suatu ungkapan maka semakin
    banyak dibutuhkan tanda kurung. Hal ini membawa
    suatu konsekuensi bahwa penulisan tanda kurung
    itupun harus benar-benar terhindar dari kesalahan.


Nurdiansah PTIK 09 UNM                          10/12/2012
Notasi Polish (Prefix)
                          15

ď‚— Dikembangkan oleh ahli matematika, Jan
  Lukasiewicz.
ď‚— Notasi Polish atau notasi prefix adalah penulisan
  ungkapan dimana operator ditulis sebelum kedua
  operand disajikan
ď‚— Contoh :
      A+B               +AB
      A+B-C             -+ABC
      (A+B)*(C-D)       *+AB – CD
      A-B/ (C*D^E)      -A/B*C^DE
Nurdiansah PTIK 09 UNM                          10/12/2012
Notasi Postfix (Suffix)
                           16

ď‚— Dikenal juga dengan istilah notasi Polish Terbalik
  (Reverse Polish Notation /RPN).
ď‚— Pada notasi ini, operator ditulis sesudah operand.
ď‚— Sama halnya dengan notasi prefix maka pada notasi
  ini tidak diperlukan adanya tanda kurung
  pengelompokan.




Nurdiansah PTIK 09 UNM                           10/12/2012
Contoh
                           17

ď‚— Ungkapan : (A+B) * (C-D)
               (AB+)*(CD-)
   dengan memisalkan (AB+) sebagai p dan (CD-)
   sebagai q, maka dengan notasi postfix diperoleh :
                  AB +CD-*
   Dalam hal ini penulisan operator menentukan
   operasi mana yang harus dikerjakan terlebih
   dahulu.



Nurdiansah PTIK 09 UNM                           10/12/2012
Cont‟…
                           18

ď‚— Contoh Lain :
           A+B–C         AB + C-
           (A+B)*(C-D)   AB + CD-*
           A-B/(C*D^E)   ABCDE^*/-




Nurdiansah PTIK 09 UNM               10/12/2012
Algoritma konversi infix ke postfix
                         19

1. Baca ungkapan dalam notasi infix, misalnya S
2. Tentukan panjang ungkapan tersebut, misalnya N
   karakter
3. Siapkan sebuah stack kosong dan siapkan derajat
   masing-masing operator, misalnya ^ berderajat 3,
   * dan / berderajat 2, + dan – berderajat 1 dan (
   berderajat 0.
4. Dimulai dari i = 1 sampai N kerjakan langkah-
   langkah sebagai berikut :


Nurdiansah PTIK 09 UNM                        10/12/2012
a. R = S[1]
b. Test nilai R. Jika R adalah :
          operand : langsung ditulis
          kurung buka : push ke dalam tumpukan
          kurung tutup : pop dan tulis semua isi tumpukan
          sampai ujung tumpukan =„(„. Pop juga tanda „(„ ini
          tetapi tidak usah ditulis.
          operator : jika tumpukan kosong atau derajat R
          lebih tinggi dibanding derajat ujung tumpukan,
          push operator ke dalam tumpukan. Jika tidak,
          pop ujung tumpukan dan tulis. Kemudian ulangi
          pembandingan R dengan ujung tumpukan.
          Kemudian R di-push
Nurdiansah PTIK 09 UNM        20                     10/12/2012
Cont‟…
                           21

c. Jika akhir notasi infix telah tercapai, dan tumpukan
    masih belum kosong, pop semua isi tumpukan dan
    tulis hasilnya

Contoh : (A+B)/ ((C-D) * E^F) -------notasi infix
           menjadi
           AB+CD-EF^*/ ------- notasi postfix




Nurdiansah PTIK 09 UNM                              10/12/2012
Ilustrasi
                                            22
                                                                Hasil Notasi
    Karakter yang                                Karakter
                             Isi tumpukan                       Postfix yang
       dibaca                                    tercetak
                                                                 terbentuk
(                        (
A                        (                   A              A
+                        (+                                 A
B                                            B              AB
)                                            +              AB+
/                        /
(                        /(
(                        /((
C                        /((                 C              AB+C
-                        /((-
D                        /((-                D              AB + CD
)                        /(                  -              AB + CD -
Nurdiansah PTIK 09 UNM                                                  10/12/2012
Cont‟…
                                23

*                        /(*
E                        /(*     E   AB + CD – E
^                        /(*^        AB + CD – E
F                        /(*^    F   AB + CD - EF
)                        /(*     ^   AB + CD – EF ^
                         /(      *   AB + CD – EF ^ *
                         /
                                 /   AB + CD – EF ^ *
                                     /




Nurdiansah PTIK 09 UNM                        10/12/2012
24



                   TO BE CONTINUE…




Nurdiansah PTIK 09 UNM               10/12/2012

Pert.6 stack

  • 1.
    1 Stack Nurdiansah PTIK 09 UNM 10/12/2012
  • 2.
    Deskripsi stack 2 ď‚— Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah LIFO (Last In First Out) dimana pengambilan data akan berkebalikan urutannya dengan penyimpanan data. ď‚— Stack adalah kumpulan data dimana data yang diletakkan di atas data yang lain. Stack adalah struktur data yang menggunakan konsep LIFO. Nurdiansah PTIK 09 UNM 10/12/2012
  • 3.
    Cont‟… 3  Elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil.  Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita melakukan PUSH. Sebaliknya, untuk memindahkan dari tempat yang di atas tersebut kita melakukan POP. Nurdiansah PTIK 09 UNM 10/12/2012
  • 4.
    Contoh 4 ď‚— Ada dua buah kotak yang ď‚— Ilustrasi sebuah stack kita tumpuk, sehingga kotak diletakkan di atas kotak yang lain. Jika kemudian stack dua buah kotak tersebut kita tambah dengan kotak ketiga dan seterusnya, maka akan kita peroleh sebuah stack kotak, yang terdiri dari N kotak. ď‚— Stack merupakan kumpulan data yang bersifat dinamis artinya bisa dilakukan penambahan atau pengambilan data darinya. Nurdiansah PTIK 09 UNM 10/12/2012
  • 5.
    Penyajian stack 5 ď‚— Stack dapat diuraikan dengan menggunakan array, dengan anggapan bahwa banyaknya elemen maksimum dari stack tersebut tidak akan melebihi batas maksimum banyaknya elemen dalam array. ď‚— Penambahan data pada stack harus dibatasi berdasarkan ukuran stack untuk menghindari overflow. ď‚— Perlu data tambahan untuk mencatat posisi ujung stack. Nurdiansah PTIK 09 UNM 10/12/2012
  • 6.
    Cont‟… 6  Stack dapat disajikan dengan menggunakan tipe data struktur (struct) yang terdiri dari dua field.  Field pertama bertipe array untuk menyimpan elemen stack.  Field kedua bertipe integer untuk mencatat posisi ujung stack. Nurdiansah PTIK 09 UNM 10/12/2012
  • 7.
    Deklarasi stack 7 #define MAXSTACK 100 typedef int ItemType; /*defenisi struktur stack*/ typedef struct { int Item[MAXSTAXK]; /*Array yang berisi data tumpukan*/ int Count; /*menunjukkan indeks data paling atas dari stack */ } Stack; Nurdiansah PTIK 09 UNM 10/12/2012
  • 8.
    Operasi pada stack 8 Operasi-operasi dasar pada stack sbb : 1. Operasi menciptakan T sebagai stack kosong void InitializeStack (Stack *S) { S -> Count = 0; } 2. Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong int Empty(Stack *S) { return (S -> Count ==0); } Nurdiansah PTIK 09 UNM 10/12/2012
  • 9.
    3. Fungsi yangmelakukan pengecekan apakah stack dalam kondisi penuh int Full (Stack *S) { return (S ->Count == MAXSTACK); } 4. Operasi menyisipkan elemen x ke stack T dan mengembalikan stack baru void Push(ItemType x, Stack *S) { if (Full) printf(“Stack penuh! Data tidak dapat masuk!”); else { S -> Item[S-> Count] = x; ++ (S -> Count); } } Nurdiansah PTIK 09 UNM 9 10/12/2012
  • 10.
    Cont‟… 10 5. Operasi mengambil elemen puncak stack T, (pop(T,x)) void Pop (Stack *S, ItemType *x) { if (Empty)// stack kosong printf (“Stack masih kosong!”); else { -- (S -> Count); * x = S -> Item [S -> Count]; S -> Item[S -> Count] = 0; } } Nurdiansah PTIK 09 UNM 10/12/2012
  • 11.
    Operasi Push 11 ď‚— Fungsi tersebut menyiapkan tempat untuk x yang akan dipush ke dalam tumpukan, yaitu dengan menambah nilai S ->Count dengan 1 dan kemudian menyisipkan x ke dalam S-> Item. ď‚— Cara memanggil prosedur di atas adalah sbb : x=5; Push(x, &tum); Nurdiansah PTIK 09 UNM 10/12/2012
  • 12.
    Operasi Pop 12  Operasi POP adalah operasi untuk menghapus elemen yang terletak pada posisi paling atas dari sebuah tumpukan.  Cara pemanggilan satu data prosedur POP adalah sbb : /*mengambil satu data dari tumpukan*/ hasil= pop (&tum); printf(„Data %d hasil pengambilan dari tumpukan : “, hasil); Nurdiansah PTIK 09 UNM 10/12/2012
  • 13.
    Notasi Infix 13 ď‚— Notasi Infix adalah cara penulisan ungkapan dimana operator ditulis di antara dua operand. ď‚— Contoh Notasi Infix : Penulisan ungkapan numeris dimana tanda kurung digunakan untuk mengelompokkan bagian mana yang akan dikerjakan terlebih dahulu. ď‚— Contoh : (A+B) * (C-D) Suku (A+B) akan dikerjakan terlebih dahulu, kemudian suku (C-D), dan terakhir mengalikan hasil yang diperoleh dari kedua suku tersebut Nurdiansah PTIK 09 UNM 10/12/2012
  • 14.
    Cont‟… 14  Bandingkan dengan ungkapan : A+B*C-D Pada ungkapan ini B*C akan dikerjakan terlebih dahulu, diikuti yang lain. Dapat disimpulkan bahwa pemakaian tanda kurung mempengaruhi hasil akhir. Semakin rumit suatu ungkapan maka semakin banyak dibutuhkan tanda kurung. Hal ini membawa suatu konsekuensi bahwa penulisan tanda kurung itupun harus benar-benar terhindar dari kesalahan. Nurdiansah PTIK 09 UNM 10/12/2012
  • 15.
    Notasi Polish (Prefix) 15  Dikembangkan oleh ahli matematika, Jan Lukasiewicz.  Notasi Polish atau notasi prefix adalah penulisan ungkapan dimana operator ditulis sebelum kedua operand disajikan  Contoh : A+B +AB A+B-C -+ABC (A+B)*(C-D) *+AB – CD A-B/ (C*D^E) -A/B*C^DE Nurdiansah PTIK 09 UNM 10/12/2012
  • 16.
    Notasi Postfix (Suffix) 16 ď‚— Dikenal juga dengan istilah notasi Polish Terbalik (Reverse Polish Notation /RPN). ď‚— Pada notasi ini, operator ditulis sesudah operand. ď‚— Sama halnya dengan notasi prefix maka pada notasi ini tidak diperlukan adanya tanda kurung pengelompokan. Nurdiansah PTIK 09 UNM 10/12/2012
  • 17.
    Contoh 17 ď‚— Ungkapan : (A+B) * (C-D) (AB+)*(CD-) dengan memisalkan (AB+) sebagai p dan (CD-) sebagai q, maka dengan notasi postfix diperoleh : AB +CD-* Dalam hal ini penulisan operator menentukan operasi mana yang harus dikerjakan terlebih dahulu. Nurdiansah PTIK 09 UNM 10/12/2012
  • 18.
    Cont‟… 18  Contoh Lain : A+B–C AB + C- (A+B)*(C-D) AB + CD-* A-B/(C*D^E) ABCDE^*/- Nurdiansah PTIK 09 UNM 10/12/2012
  • 19.
    Algoritma konversi infixke postfix 19 1. Baca ungkapan dalam notasi infix, misalnya S 2. Tentukan panjang ungkapan tersebut, misalnya N karakter 3. Siapkan sebuah stack kosong dan siapkan derajat masing-masing operator, misalnya ^ berderajat 3, * dan / berderajat 2, + dan – berderajat 1 dan ( berderajat 0. 4. Dimulai dari i = 1 sampai N kerjakan langkah- langkah sebagai berikut : Nurdiansah PTIK 09 UNM 10/12/2012
  • 20.
    a. R =S[1] b. Test nilai R. Jika R adalah : operand : langsung ditulis kurung buka : push ke dalam tumpukan kurung tutup : pop dan tulis semua isi tumpukan sampai ujung tumpukan =„(„. Pop juga tanda „(„ ini tetapi tidak usah ditulis. operator : jika tumpukan kosong atau derajat R lebih tinggi dibanding derajat ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan dan tulis. Kemudian ulangi pembandingan R dengan ujung tumpukan. Kemudian R di-push Nurdiansah PTIK 09 UNM 20 10/12/2012
  • 21.
    Cont‟… 21 c. Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya Contoh : (A+B)/ ((C-D) * E^F) -------notasi infix menjadi AB+CD-EF^*/ ------- notasi postfix Nurdiansah PTIK 09 UNM 10/12/2012
  • 22.
    Ilustrasi 22 Hasil Notasi Karakter yang Karakter Isi tumpukan Postfix yang dibaca tercetak terbentuk ( ( A ( A A + (+ A B B AB ) + AB+ / / ( /( ( /(( C /(( C AB+C - /((- D /((- D AB + CD ) /( - AB + CD - Nurdiansah PTIK 09 UNM 10/12/2012
  • 23.
    Cont‟… 23 * /(* E /(* E AB + CD – E ^ /(*^ AB + CD – E F /(*^ F AB + CD - EF ) /(* ^ AB + CD – EF ^ /( * AB + CD – EF ^ * / / AB + CD – EF ^ * / Nurdiansah PTIK 09 UNM 10/12/2012
  • 24.
    24 TO BE CONTINUE… Nurdiansah PTIK 09 UNM 10/12/2012