• Tidak ada hasil yang ditemukan

Algoritma dan Struktur Data

N/A
N/A
Protected

Academic year: 2018

Membagikan "Algoritma dan Struktur Data"

Copied!
22
0
0

Teks penuh

(1)

Algoritma dan Struktur Data

(2)

Stack atau tumpukan adalah suatu stuktur

data yang penting dalam pemrograman.

Bersifat LIFO (Last In First Out)

Benda yang terakhir masuk ke dalam stack

akan

menjadi

benda

pertama

yang

(3)
(4)

Program memanggil fungsi satu, di dalam

(5)
(6)

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

(7)

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

(8)

Defnisikan Stack dengan menggunakan struct

Contoh : typedef struct STACK{ int top;

char data[10][10];

};

Defnisikan MAX_STACK untuk maksimum isi stack

Contoh : #defne MAX_STACK 10 //hati-hati mulai dari

0 jadi 0-9

Buatlah variabel tumpuk sebagai implementasi stack

secara nyata

Contoh : STACK tumpuk;

Pada mulanya isi top dengan -1, karena array dalam C

dimulai dari 0, yang berarti stack adalah KOSONG!

Top adalah suatu variabel penanda dalam STACK yang

(9)

9

8

7

6

5

4

3

2

1

0

MAX_STACK

void inisialisasi()

{

tumpuk.top = -1;

}

(10)

Untuk memeriksa apakah stack sudah

penuh.

Dengan cara memeriksa top of stack, jika

sudah sama dengan MAX_STACK-1 maka

full, jika belum (masih lebih kecil dari

MAX_STACK-1) maka belum full.

int IsFull()

{

if(tumpuk.top == MAX_STACK-1)

return 1;

else

(11)

Untuk memeriksa apakah stack masih

kosong.

Dengan cara memeriksa top of stack, jika

masih -1 maka berarti stack masih kosong!

int IsEmpty()

{

if(tumpuk.top == -1)

return 1;

else

(12)

Untuk memasukkan elemen ke stack, selalu

menjadi elemen teratas stack.

Tambah satu (increment) nilai top of stack

terlebih dahulu setiap kali ada penambahan

elemen stack, asalkan stack masih belum

penuh, kemudian isikan nilai baru ke stack

berdasarkan indeks top of stack setelah

ditambah satu (diincrement).

void Push(char d[10])

{

tumpuk.top++;

(13)

Untuk mengambil elemen teratas dari

stack.

Ambil dahulu nilai elemen teratas stack

dengan mengakses top of stack, tampilkan

nilai yang akan diambil terlebih dahulu,

baru didecrement nilai top of stack

sehingga jumlah elemen stack berkurang.

void Pop()

{

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

tumpuk.top--;

(14)

Untuk menampilkan semua elemen-elemen

stack

Dengan cara looping semua nilai array

secara

terbalik,

karena

kita

harus

mengakses dari indeks array tertinggi

terlebih dahulu baru ke indeks yang kecil!

void TampilStack()

{

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

{

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

}

(15)

#include <stdio.h> #include <conio.h> #include <string.h> #defne 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();

else

printf("\nMasih kosong!\ n");

break;

case 3: if(IsEmpty() != 1) TampilStack(); else

printf("\nMasih kosong!\ n");

break; case 4: Clear();

printf("\nSudah kosong!\ n");

break; }

getch();

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

(16)
(17)

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 :

#defne MAX 8

typedef struct{ int data[MAX];

int head;

(18)

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;

else

(19)

IsFull

Untuk mengecek apakah Antrian sudah penuh atau belum

Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena

MAX-1 adalah batas elemen 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)

(20)

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--;

(21)

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]);

}

(22)

Referensi

Dokumen terkait

Dari data hasil kuesioner yang disebar di diwilayah Banjarbaru dan Martapura Kalimantan Selatan tantang permasalahan kerusakan motor vespa yaitu banyak pengguna

Dengan demikian, Anwar Zahid yang secara pribadi adalah seorang kyai, pemegang otoritas agama di masyarakat, dengan media baru yang ia gunakan dalam menyebarkan dakwahnya

Sebagaimana disebutkan dalam butir 13 Pasal 1 Undang-Undang Nomor 10 Tahun 1998 memberikan batasan pengertian prinsip syariah sebagai aturan perjanjian berdasarkan

Bila kita tanyakan satu persatu kepada para penerima beasiswa studi ke luar negeri, kita akan mendapatkan satu hal yang sama diantara mereka, yaitu mereka sudah membangun

ANALISIS KINERJA KEUANGAN PERUSAHAAN PERTAMBANGAN BATUBARA YANG TERDAFTAR.. DI BURSA EFEK

Dengan sistem informasi berbasis komputer maka akan memberikan kemudahan pada Persewaan CD Tisanda pada sistem pelayanan transaksi peminjaman dan pengembalian, karena

Sedangkan hasil dari analisis elemen penyusun model menghasilkan bahwa elemen-elemen penyusun model adalah: (1) daur hidup enterprise pertanian di Indonesia terdiri atas fase

Akan tetapi hakim tetap pada Undang-Undang yang berlaku selama tidak ada perjanjian yang mengikat antara keduanya dalam membagi harta bersama selama dalam