Anda di halaman 1dari 7

Program Studi Teknik Elektro ITB

Nama Kuliah (Kode) : Praktikum Pemecahan Masalah dengan C (EL2208)


Tahun / Semester : 2022-2023 / Genap
Modul : 7 – Stacks and Queue
Nama Asisten / NIM : Eunike Kristianti / 18320019
Nama Praktikan / NIM : Najmi Azzahra F / 13221086

BCL / Log Praktikum


Pilihan Soal Praktikum Yang Dikerjakan
Nomor 1, karena jauh lebih mudah disbanding nomor 2.

I. Penjelasan Rancangan /Algoritma kode yang dibuat


Berikut adalah source code yang dibuat beserta penjelasan rancangannya:
 Preprosesor
Kode Penjelasan
#include <stdio.h> Include library yang digunakan Berikut
#include <stdlib.h> adalah kegunaan rinci tiap library:
#include <string.h> 1. stdio. H berfungsi sebagai library untuk
#define MAX_LENGTH 50 I/O
2. stdlib.h untuk keperluan konversi tipe
data,
3. string.h berfungsi untuk mengelola
string,
serta didefinisikan konstanta max_length
untuk sepagai panjang maksimujm dari
array.

 Deklarasi Stack
Kode Penjelasan
//Deklarasi Stack Mendeklarasikan tipe data baru yaitu stack.
typedef struct Stack { Stack terdiri sari dua variabel, yaitu array of
char items[MAX_LENGTH]; char items yang merupakan array untuk
int top; menyimpan stack itu sendiri, serta integer
} Stack; top untuk penanda indeks elemen items
yang terletak paling atas.

 Fungsi isFull
Kode Penjelasan
int isFull(Stack* stack, int n){ Fungsi untuk megecek apakah variabel
if(stack->top == (n)-1) array pada stack sudah terisi penuh apa
return 1; belum. Fungsi ini menerima pointer stack
else dan integer n sebagai panjang dari string
return 0; input.
}
Fungsi ini akan membaca variabel top dari
stack. Ingatlah bahwa variabel top
menyimpan indeks elemen teratas. Jika
indeks sama dengan panjang string-1, maka
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

stack penuh dan akan dikembalikan 1, jika


tidak maka stack belum penuh dan akan
dikembalikan 0.

 Fungsi isEmpty
Kode Penjelasan
int isEmpty(Stack* stack) { Fungsi untuk megecek apakah variabel
if(stack->top == -1) array pada stack kosong atu tidak. Fungsi ini
return 1; menerima pointer stack.
else
return 0; Fungsi ini akan membaca variabel top dari
} stack. Ingatlah bahwa variabel top
menyimpan indeks elemen teratas. Jika
indeks sama dengan panjang -1, maka stack
maka stack masih kosong dan akan
dikembalikan 1, jika tidak maka stack sudah
tidak kosong dan akan dikembalikan 0.

 Prosedur push
Kode Penjelasan
void push(Stack* stack, char item, Prosedur untuk menambahkan elemen
int n) { baru pada variabel array stack. prosedur ini
if (isFull(stack, n)) menerima pointer stack dan single-char
return; item, elemen yang ingin dimasukkan ke
++stack->top ; array items.
stack->items[stack->top] = item;
Pertama- tama, terdapat kondisional yang
}
menentukan apakah array sudah penuh
atau belum menggunakan fungsi isFull. Jika
sudah, maka array tidak bisa ditambah lagi
dan fungsi push langsung selesai.

Jika belum penuh, maka variabel top akan


mengalami increment yang berarti indeks
elemen teratas berubah, lalu pada indeks
tersebut di array items akan diisi oleh item.

 Prosedur pop
Kode Penjelasan
char pop(Stack* stack) { Fungsi untuk menghapus elemen teratas
if (isEmpty(stack)) pada variabel array stack. Fungsi ini
return 0; menerima pointer stack.
return stack->items[stack->top--];
} Pertama-tama Pertama- tama, terdapat
kondisional yang menentukan apakah
array masih kosong atau tidak
menggunakan fungsi isEmpty. Jika masih
kosong, maka array tidak bisa dikurangi
lagi dan fungsi pop langsung selesai.

Jika tida kosong, maka variabel top akan


mengalami decrement yang berarti indeks
elemen teratas berubah jadi makin kecil,
Halaman 2 dari 7
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

hal ini tentunya berarti elemen teratas


juga berubah.

 Main program
Kode Penjelasan
int main() { Mendeklarasikan variabel yang akan
char str[MAX_LENGTH] ; digunakan untuk menyimpan data string
input, yaitu array of char str yang memiliki
//Input string panjang maksimum MAX_LENGTH.
printf("Masukkan string: ");
scanf("%s" , str);
Selanjutnya adalah input string dari
pengguna, dilanjutkan dengan mencari
panjang string lalu menyimpan data
//Mencari panjang string
panjang string pada integer n.
int n = strlen(str);

Setelahnya, dideklarasikan stack sebagai


//Mendeklarasikan stack pointer. DIlnjutkan dengan pengalokasian
Stack *stack; memori untuk stack dengan malloc.
stack = (Stack*)malloc(sizeof(Stack));
Selanjutnya elemen teratas top akan
//Mengisi elemen teratas dengan -1 sebagai diassign dengan -1 debagai penanda bahwa
penanda stack masih kosong.
stack->top = -1;
Dilanjutkan dengan for loop untuk
//For loop untuk menelusuri string per single menelusuri string per single-char. Terdapat
char kondisional di dalam loop. Jika single char
for (int i = 0 ; i < n ; i++) {
merupakan buka kurung, maka akan
//Menambahkan buka kurung ke stack
dilakukan push ke stack. Jika single char
tutup kurung, maka akan dilakukan
if (str[i] == '(' || str[i] == '[' ||
pengecekan terhadap elemen teratas stack.
str[i] == '{') {
Jika elemen teratas stack adalah pasangan
push(stack, str[i], n);
kurung buka yang sesuai, maka akan
//printf("%c\n", stack->items[stack-
dilakukan pop terhadap stack untuk
>top]);
“menghapus” elemen tersebut dri stack.
//Mengecek elemen teratas stack,
//apakah merupakan pasangan kurung yang Pada akhirnya, menggunakan isEmpty akan
sesuai dicek apakah stack kosong atau tidak. Jika
//Jika iya dilakukan pop untuk stack kosong, maka semua pasangan
mengosongkan stack kurung bersesuaian, aka nada output yang
} else if (str[i] == ')' ) { menuliskan hal tersebut.. Jika stack tidak
if (stack->items[stack->top] == '('){ kosong, maka ada pasangan kurung yang
pop(stack); tidak sesuai, juga aka nada output tulisan
} yang akan menjelaskan hal tersebut..
} else if (str[i] == ']' ) {
if (stack->items[stack->top] == '['){
pop(stack);
}
} else if (str[i] == '}' ) {
if (stack->items[stack->top] == '{'){
pop(stack);

Halaman 3 dari 7
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

}
}
}

//Mengecek apakah stack kosong


//Jika stack kosong berarti semua pasangan
kurung sesuai
if (isEmpty(stack)) {
printf("Semua kurung sesuai");
} else {
printf("Ada kurung tidak sesuai");
}
return 0;
}

II. Flowchart Kode yang Dibuat


Flowchart isFull Flowchart isEmpty

Halaman 4 dari 7
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

Flowchart push Flowchart pop

Halaman 5 dari 7
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

Halaman 6 dari 7
Praktikum Pemecahan Masalah dengan C (EL2208) | Tahun 2020-2021 | Semester Genap

III. DFD Dari Kode yang Dibuat

IV. Analisis Kompleksitas Algoritma

Dengan menggunakan big-O-Notation, saya akan menganalisis kompleksitas waktu pada kondisi terburuk.
Berikut adalah analisis kompleksitas waktu dari kode yang saya buat:
 Analisis kompleksitas waktu fungsi isFull, is Empty, prosedur push dan pop.
Untuk semua program tersebut, karena baik kode setelah if maupun seteleh else merupakan statement
dasar seperti assignment maupun increment/decrement, maka kompleksitas waktunya adalah 𝑂𝑂(1).
 Analisis kompleksitas waktu main program
Karena mengandung for loop yang bergantung pada panjang input char str, maka kompleksitas
waktunya adalah 𝑂𝑂(𝑛𝑛)

Halaman 7 dari 7

Anda mungkin juga menyukai