Skip to content

Commit 823f780

Browse files
authored
Merge pull request #15 from yusuf601/main
feat: menambahkan studi kasus stack
2 parents b23b210 + 4285ed6 commit 823f780

2 files changed

Lines changed: 133 additions & 0 deletions

File tree

case_study/readme.md

Whitespace-only changes.

case_study/use_array.cpp

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
#include <iostream>
2+
#include <string>
3+
#include <stdexcept>
4+
class Stack{
5+
private://abstraksi dynamic array
6+
int size;
7+
int capacity;
8+
char* arr;
9+
private:
10+
std::string s;
11+
public:
12+
//default constructor
13+
Stack()noexcept{
14+
this->capacity = 1;
15+
this->size = 0;
16+
this->s = "";
17+
this->arr = new char[capacity];
18+
}
19+
//constructor
20+
Stack(int capacity,std::string s){
21+
this->capacity = capacity;
22+
this->size = 0;
23+
this->s = s;
24+
this->arr = new char[capacity];
25+
}
26+
private: //method valid parantheses
27+
bool is_open(char bracket){
28+
if(bracket == '{'){
29+
return true;
30+
}
31+
if(bracket == '('){
32+
return true;
33+
}
34+
if(bracket == '['){
35+
return true;
36+
}
37+
return false;
38+
}
39+
bool is_close(char bracket){
40+
if(bracket == '}'){
41+
return true;
42+
}
43+
if(bracket == ')'){
44+
return true;
45+
}
46+
if(bracket == ']'){
47+
return true;
48+
}
49+
return false;
50+
}
51+
bool is_matching(char open,char close){
52+
if(open == '{' && close == '}'){
53+
return true;
54+
}
55+
if(open == '(' && close == ')'){
56+
return true;
57+
}
58+
if(open == '[' && close == ']'){
59+
return true;
60+
}
61+
return false;
62+
}
63+
std::string parser(){
64+
std::string res;
65+
for(int i = 0;i < this->s.size();i++){
66+
if(isalnum(s[i])){
67+
res.push_back(s[i]);
68+
}
69+
}
70+
return res;
71+
}
72+
private://getter stack
73+
char top()const noexcept{
74+
return arr[size - 1];
75+
}
76+
bool is_empty()const noexcept{
77+
if(size == 0){
78+
return true;
79+
}
80+
return false;
81+
}
82+
private:
83+
void push(const char& bracket)noexcept{
84+
arr[size] = bracket;
85+
size++;
86+
}
87+
void pop(){
88+
if(size == 0){
89+
throw std::runtime_error("Stack kosong");
90+
}
91+
arr[size - 1] = 0;
92+
size--;
93+
}
94+
public:
95+
bool valid_parantheses(){
96+
std::string res = parser();
97+
for(int i = 0;i < res.size();i++){
98+
if(is_open(res[i])){
99+
//push ke stack
100+
arr[size] = res[i];
101+
size++;
102+
}else if(is_close(res[i])){
103+
//jika kosong maka tidak ada pasangan
104+
if(is_empty()){
105+
return false;
106+
}
107+
//jika tidak matching langsung return false
108+
if(!is_matching(arr[size - 1],res[i])){
109+
return false;
110+
}
111+
//pop jika matching
112+
arr[size - 1] = 0;
113+
size--;
114+
}
115+
}
116+
return true;
117+
}
118+
void result(){
119+
if(valid_parantheses()){
120+
std::cout << "Bracket valid" << std::endl;
121+
}else{
122+
std::cout << "Bracket tidak valid" << std::endl;
123+
}
124+
125+
}
126+
};
127+
int main(){
128+
Stack* stack1 = new Stack(100,"(a+b)");
129+
stack1->result();
130+
// Your code here
131+
std::cin.get();
132+
return 0;
133+
}

0 commit comments

Comments
 (0)