https://www.acmicpc.net/problem/1918
구조체로 스택을 만들고 다시 해보았습니다.(.cpp에서 돌려야합니다.)
설명은 이전의 글을 참조해주세요.
typedef struct stack {
char s[MAX_SIZE];
int size;
stack() {
size = 0;
}
int empty() {
if (size) return 0;
else return 1;
}
void push(char c) {
s[size] = c;
size++;
}
void pop() {
if (!empty()) {
size--;
}
}
char top() {
return s[size - 1];
}
}stack;
char* getPostOrder(char* str) {
int len = strlen(str);
char* ret = (char*)malloc(sizeof(char) * (len + 1));
int retIdx = 0;
stack s;
for (int i = 0; i < len; i++) {
if (str[i] == '+' || str[i] == '-') {
while (!s.empty() && s.top() != '(') {
ret[retIdx++] = s.top();
s.pop();
}
s.push(str[i]);
}
else if (str[i] == '*' || str[i] == '/') {
while (!s.empty() && (s.top() == '*' || s.top() == '/')) {
ret[retIdx++] = s.top();
s.pop();
}
s.push(str[i]);
}
else if (str[i] == '(') {
s.push(str[i]);
}
else if (str[i] == ')') {
while (s.top() != '(') {
ret[retIdx++] = s.top();
s.pop();
}
s.pop();
}
else if (str[i] >= 'A' && str[i] <= 'Z') {
ret[retIdx++] = str[i];
}
}
while (!s.empty()) {
ret[retIdx++] = s.top();
s.pop();
}
ret[retIdx] = '\0';
return ret;
}
int main() {
char str[MAX_SIZE];
scanf("%s", str);
char *ret = getPostOrder(str);
printf("%s", ret);
free(ret);
return 0;
}
'CS기본지식 > 자료구조' 카테고리의 다른 글
[C언어] 원형 큐(라운드 큐) (0) | 2017.09.07 |
---|---|
[C언어] 우선순위 큐(Priority Queue) (3) | 2017.09.07 |
[2263] 트리의 순회 (1) | 2017.08.27 |
스택 계산기 (0) | 2017.06.13 |
[1918] 후위표기식 (2) | 2017.06.13 |