Anda di halaman 1dari 26

IFS2101 –

Algoritma dan Struktur Data


Minggu 07 Sesi 1,2,3

Inte Christinawati Bu’ulӧlӧ


0118118201
Topik
 Pengertian Stack
 Operasi Dasar Stack
 Pemakaian Stack
 Karakteristik Stack
 Implementasi stack dengan tabel / array
 Implementasi stack dengan linked list

11/28/2018 ICB/Alsrudat/W07S1 2
11/28/2018 ICB/Alsrudat/W07S1 3
11/28/2018 ICB/Alsrudat/W07S1 4
Pengertian Stack
• Stack adalah sebuah abstract data type (ADT) yang berisi koleksi data
item yang hanya dapat diakses pada akhir bagian (atas) stack, biasa
disebut top.
• Prinsip pada stack: LIFO (LAST IN FIRST OUT)
• Artinya: Item terakhir yang kita masukkan ke dalam sebuah stack
adalah item yang paling pertama harus kita keluarkan
• Tambah atau Hapus item hanya melalui TOP.

11/28/2018 ICB/Alsrudat/W07S1 5
Operasi Dasar STACK
• PUSH
• Tambah item ke tumpukan
• POP
• Ambil item dari tumpukan

11/28/2018 ICB/Alsrudat/W07S1 6
PUSH dan POP

11/28/2018 ICB/Alsrudat/W07S1 7
Pemakaian STACK
• Pemanggilan prosedur
• Perhitungan ekspresi aritmatika
• Rekursif
• Back track algorithm

11/28/2018 ICB/Alsrudat/W07S1 8
Karakteristik STACK
• Data hanya dapat di-insert pada posisi top stack
• Data hanya dapat di-delete pada posisi top stack
• Data tidak dapat di-delete dari tengah-tengah stack tanpa
memindahkan item yang ada pada atasnya terlebih dahulu
• Stack dapat diimplementasikan dengan:
• Array
• Linked List

11/28/2018 ICB/Alsrudat/W07S1 9
Implementasi Stack dengan Array

11/28/2018 10
ICB/Alsrudat/W07S1
Beberapa model penyimpanan

• Posisi indeks [0] sebagai posisi atas stack.

• Amati masalah apa yang muncul setiap kali push


dan pop?

11/28/2018 ICB/Alsrudat/W07S1 11
Beberapa model penyimpanan

• Pendekatan yang lebih baik adalah dengan indeks [0] di posisi bawah
stack.

Top

• Pada pendekatan ini butuh dua mekanisme


• Sebuah array untuk menyimpan elemen stack
• Sebuah integer untuk mengenali bagian TOP dan stack.

11/28/2018 ICB/Alsrudat/W07S1 12
Definisi Prototype
void CreateEmptyStack (Stack* S, int _Size);
/*Membuat sebuah stack kosong, berukuran S*/

void DestroyStack (Stack* S);


/*Mengembalikan memory ; Size dan TOP diset Nil*/

boolean IsStackEmpty (Stack S);


/*Mengirim true jika stack kosong dan false jika tidak kosong*/

boolean IsStackFull (Stack S);


/*Mengirim true jika stack penuh dan false jika tidak penuh*/

void Push (Stack* S, infotype v);


/* Prekondisi : stack tidak penuh */
/*Menambahkan sebuah elemen v sebagai TOP. TOP berubah nilainya*/

void Pop (Stack* S, infotype* v);


/* Prekondisi : stack tidak kosong */
11/28/2018 ICB/Alsrudat/W07S1 13
Contoh Penggunaan Program

• Program yang mengkonvesi


angka basis 10 ke basis 2.

• Coba anda selesaikan dengan stack.


• Gunakan push, pop, dan top

11/28/2018 ICB/Alsrudat/W07S1 14
Definisi Type Statik
#define Max = 20
#define Nil -1= -1
typedef int address;
typedef int infotype;
typedef struct
{
infotype T[Max]; /* memori penyimpanan elemen*/
/* ukuran semua stack sama =Max*/
address TOP; /* alamat TOP: elemen puncak*/
} Stack;

/* Definisi stack yang kosong : S.TOP = Nil */


/* Elemen yang dipakai menyimpan nilai stack adalah T[0]..T[Max-1]
*/

11/28/2018 ICB/Alsrudat/W07S1 15
Definisi Type Dinamik
const Nil = -1
typedef int address;
typedef int infotype;
typedef struct
{
infotype * T; /* memori penyimpanan elemen*/
address TOP; /* alamat TOP: elemen puncak*/
int Size; /* Ukuran stack, banyaknya elemen */
} Stack;

/* Definisi stack yang kosong : S.TOP = Nil */


/* Elemen yang dipakai menyimpan nilai stack adalah
T[0]..T[Size-1] */
11/28/2018 ICB/Alsrudat/W07S1 16
Driver
/* file: mstack.c */
#include “stack.h”
int main () {
int X;
Stack S;
while (!IsStackFull(S)) {
Push (&S,3);
}

while (!IsStackEmpty(S)) {
Pop (&S, &X);
Printf(“%d”, X);
}

return 0;
}

11/28/2018 ICB/Alsrudat/W07S1 17
Implementasi Stack dengan Linked List

11/28/2018 ICB/Alsrudat/W07S1 18
11/28/2018 ICB/Alsrudat/W07S1 19
11/28/2018 ICB/Alsrudat/W07S1 20
Beberapa model penyimpanan stack
dengan linked list
• Penanda TOP
• Awal List :
• Push: selalu insertfirst
• Pop: selalu deletefirst
• Di akhir list:
• Push: selalu selalu insertlast
• Pop: selalu deletelast

11/28/2018 ICB/Alsrudat/W07S1 21
Penanda TOP :
Awal List

11/28/2018 ICB/Alsrudat/W07S1 22
Definisi Prototype
address Alokasi(Infotype X);
/*Mengirim true jika stack penuh dan false jika tidak penuh*/

void CreateEmptyStack (Stack* S);


/*Membuat sebuah stack kosong*/

void Destroy (Stack* S);


/*Setiap alamat elemen stack di dealokasi, dikembalikan ke sistem*/

boolean IsStackEmpty (Stack S);


/*Mengirim true jika stack kosong dan false jika tidak kosong*/

void Push (Stack* S, infotype v);


/* Prekondisi : stack tidak penuh */
/*Menambahkan sebuah elemen v sebagai TOP. TOP berubah nilainya*/

void Pop (Stack* S, infotype* v);


/* Prekondisi : stack tidak kosong */
11/28/2018 ICB/Alsrudat/W07S1 23
Definisi Type
#define Nil NULL
#define Top(S) (S).Top
#define Count(S) (S).count
#define Info(P) (P)->Info
#define Next(P) (P)->Next
typedef int Infotype;
typedef struct tElmtlist *address;
typedef struct tElmtlist
{
Infotype Info;
address Next;
} ElmtList;

typedef struct
{
address Top;
int count;
} StackList;

11/28/2018 ICB/Alsrudat/W07S1 24
#include <stdio.h>
#include <stdlib.h>
#include "stacklist.h"
Driver int main(int argc, char *argv[])
{
/*KAMUS*/
StackList S;
/*ALGORITMA*/
CreateEmptyStack(&S);
Push(&S,Alokasi(20));
Push(&S,Alokasi(30));
Push(&S,Alokasi(90));
Push(&S,Alokasi(60));
/*Show Info All Element*/
printf("Count Element = %d\n",Count(S));
printf("==Info Element==\n");
while(!IsStackEmpty(S))
{
address pTemp;
Pop(&S,&pTemp);
printf("%d\n",Info(pTemp));
}
return 0;
11/28/2018 } ICB/Alsrudat/W07S1 25
Daftar Pustaka
• Liem, Inggriani (2008). Draft Diktat Struktur Data. Teknik Informatika
ITB

11/28/2018 ICB/Alsrudat/W07S1 26

Anda mungkin juga menyukai