algoritma dan struktur data - ramos' blog · digunakan os untuk memungkinkan pemanggilan...

20
Algoritma dan Struktur Data Ramos Somya, S.Kom., M.Cs.

Upload: vukhanh

Post on 31-Mar-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Algoritma dan Struktur Data

Ramos Somya, S.Kom., M.Cs.

Page 2: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Stack atau tumpukan adalah suatu stuktur data yangpenting dalam pemrograman eksekusi suatu fungsimenggunakan prinsip Stact.

Bersifat LIFO (Last In First Out)

Benda yang terakhir masuk ke dalam stack akan menjadibenda pertama yang dikeluarkan dari stack

Page 3: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Program memanggil fungsi satu, di dalam fungsi satumemanggil fungsi dua, di dalam fungsi dua memanggilfungsi tiga.

Page 4: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan
Page 5: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested.

Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan untuk memungkinkan konversi program rekursif

menjadi non-rekursif. Untuk mendukung mekanisme Pushdown Automata (PDA).

Page 6: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Push : digunakan untuk menambah item pada stack pada tumpukan paling atas

Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas

Clear : digunakan untuk mengosongkan stack

IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong

IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Page 7: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Definisikan Stack dengan menggunakan structContoh : typedef struct STACK{ int top;

char data[10][10];};

Definisikan MAX_STACK untuk maksimum isi stackContoh : #define MAX_STACK 10 //hati-hati mulai dari 0 jadi 0-9

Buatlah variabel tumpuk sebagai implementasi stack secara nyataContoh : STACK tumpuk;

Pada mulanya isi top dengan -1, karena array dalam C dimulai dari0, yang berarti stack adalah KOSONG!

Top adalah suatu variabel penanda dalam STACK yangmenunjukkan elemen teratas stack sekarang. Top Of Stack akanselalu bergerak hingga mencapai MAX of STACK sehinggamenyebabkan stack PENUH!

Page 8: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

9

8

7

6

5

4

3

2

1

0

MAX_STACK

void inisialisasi(){

tumpuk.top = -1;}

Top=-1

Page 9: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Untuk memeriksa apakah stack sudah penuh.

Dengan cara memeriksa top of stack, jika sudah samadengan MAX_STACK-1 maka full, jika belum (masih lebihkecil dari MAX_STACK-1) maka belum full.

int IsFull(){

if(tumpuk.top == MAX_STACK-1)return 1;elsereturn 0;

}

Page 10: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Untuk memeriksa apakah stack masih kosong.

Dengan cara memeriksa top of stack, jika masih -1 makaberarti stack masih kosong!

int IsEmpty(){

if(tumpuk.top == -1)return 1;elsereturn 0;

}

Page 11: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Untuk memasukkan elemen ke stack, selalu menjadielemen teratas stack.

Tambah satu (increment) nilai top of stack terlebih dahulusetiap kali ada penambahan elemen stack, asalkan stackmasih belum penuh, kemudian isikan nilai baru ke stackberdasarkan indeks top of stack setelah ditambah satu(diincrement).

void Push(char d[10]){

tumpuk.top++;strcpy(tumpuk.data[tumpuk.top],d);

}

Page 12: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Untuk mengambil elemen teratas dari stack.

Ambil dahulu nilai elemen teratas stack denganmengakses top of stack, tampilkan nilai yang akandiambil terlebih dahulu, baru didecrement nilai top ofstack sehingga jumlah elemen stack berkurang.

void Pop(){

printf("Data yang terambil = %s\n",tumpuk.data[tumpuk.top]);tumpuk.top--;

}

Page 13: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Untuk menampilkan semua elemen-elemen stack

Dengan cara looping semua nilai array secara terbalik,karena kita harus mengakses dari indeks array tertinggiterlebih dahulu baru ke indeks yang kecil!

void TampilStack(){

for(int i=tumpuk.top;i>=0;i--){

printf("Data : %s\n",tumpuk.data[i]);}

}

Page 14: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

#include <stdio.h>#include <conio.h>#include <string.h>#define MAX_STACK 10

typedef struct STACK { int top;char data[10][10];

};STACK tumpuk;

void inisialisasi(){ tumpuk.top = -1;}

int IsFull() { if(tumpuk.top == MAX_STACK-1) return 1; else return 0;}

int IsEmpty(){ if(tumpuk.top == -1) return 1; else return 0;}

void Push(char d[10]){ tumpuk.top++;

strcpy(tumpuk.data[tumpuk.top],d); }

void Pop(){ printf("Data yang terambil =

%s\n",tumpuk.data[tumpuk.top]);tumpuk.top--; }

void Clear(){ tumpuk.top=-1; }

void TampilStack(){ for(int i=tumpuk.top;i>=0;i--){ printf("Data : %s\n",tumpuk.data[i]); }

}

int main(){

int pil;inisialisasi();char dt[10];do{ printf("1. push\n");

printf("2. pop\n");printf("3. print\n");printf("4. clear\n");printf("5. exit\n");printf("Pilihan : ");scanf("%d",&pil);switch(pil){case 1: if(IsFull() != 1)

{ printf("Data = ");scanf("%s",dt);Push(dt); } else printf("\nSudah penuh!\n");break;

case 2: if(IsEmpty() != 1)Pop();elseprintf("\nMasih kosong!\n");break;

case 3: if(IsEmpty() != 1)TampilStack();elseprintf("\nMasih kosong!\n");break;

case 4: Clear();printf("\nSudah kosong!\n");break;

}getch();

} while(pil != 5);getch();

}

Page 15: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya (FIFO).

Contoh: pencarian dengan metode Breadth First Search. DEQUEUE adalah mengeluarkan satu elemen dari suatu

Antrian. Terdapat satu buah pintu masuk di suatu ujung dan satu

buah pintu keluar di ujung satunya. Sehingga membutuhkan variabel Head dan Tail Deklarasi Queue :

#define MAX 8typedef struct{ int data[MAX];

int head;int tail;

} Queue;Queue antrian;

Page 16: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Create ( )

Untuk menciptakan dan menginisialisasi Queue

Dengan cara membuat Head dan Tail = -1

IsEmpty ( )

Untuk memeriksa apakah Antrian sudah penuh atau belum

Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty

Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian(elemen pertama dalam antrian) yang tidak akan berubah-ubah

Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian

ke belakang, yaitu menggunakan nilai Tail

void Create(){antrian.head=antrian.tail=-1;}

int IsEmpty(){ if(antrian.tail==-1)

return 1;elsereturn 0;

}

Page 17: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

IsFull Untuk mengecek apakah Antrian sudah penuh atau belum

Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah bataselemen array pada C) berarti sudah penuh

Enqueue (data)

Untuk menambahkan elemen ke dalam

Antrian, penambahan elemen selalu

ditambahkan di elemen paling belakang.

Penambahan elemen selalu menggerakan

variabel Tail dengan cara increment

counter Tail

int IsFull(){ if(antrian.tail==MAX-1) return 1;else return 0;

}void Enqueue(int data){if(IsEmpty()==1){antrian.head=antrian.tail=0;antrian.data[antrian.tail]=data;printf("%d masuk!",antrian.data[antrian.tail]);} else

if(IsFull()==0){antrian.tail++;antrian.data[antrian.tail]=data;printf("%d masuk!",antrian.data[antrian.tail]);

}}

Page 18: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Dequeue()

Digunakan untuk menghapus elemen terdepan/pertama dari Antrian

Dengan cara mengurangi counter Tail dan menggeser semua elemen antrian ke depan.

Penggeseran dilakukan dengan menggunakan looping

int Dequeue(){ int i;int e = antrian.data[antrian.head];for(i=antrian.head;i<=antrian.tail-1;i++){ antrian.data[i] = antrian.data[i+1]; }antrian.tail--;return e;

}

Page 19: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan

Clear()

Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1

Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya

Tampil

Untuk menampilkan nilai-nilai

elemen Antrian

Menggunakan looping dari

head s/d tail

void Clear(){antrian.head=antrian.tail=-1;printf("data clear");}

void Tampil(){ if(IsEmpty()==0){ for(int i=antrian.head;i<=antrian.tail;i++)

{ printf("%d ",antrian.data[i]);}

}else printf("data kosong!\n");}

Page 20: Algoritma dan Struktur Data - Ramos' Blog · Digunakan OS untuk memungkinkan pemanggilan prosedur secara nested. Implementasi algoritma parsing, evaluasi dan backtracking. Digunakan