반응형
오랜만에 C 연습 좀 해봅싀당
후위 표기법 규칙에 대한 건 윗 블로그를 보며 복습했슴다!
일단 괄호 없이 동작하는 후위 연산자 변환 프로그램 만들어봅니다
/*
괄호 없을 때 중위 연산자 입력받아서 후위 연산자로 출력해주는 프로그램
*/
#include <stdio.h>
#include <stdbool.h>
#define STACKSIZE 10
int top = -1;
bool isEmpty(void)
{
return top == -1;
}
bool isFull(void)
{
return top == STACKSIZE - 1;
}
void push(char* stack, char data)
{
if (!isFull())
{
stack[++top] = data;
printf("top:%d->data:%d\n", top, stack[top]);
}
else
{
printf("Full\n");
}
}
char pop(char* stack)
{
if (!isEmpty())
{
return stack[top--];
}
else
{
printf("Empty\n");
}
}
char peek(char* stack)
{
if (!isEmpty())
{
return stack[top];
}
else
{
printf("Empty\n");
}
}
int operatorPriority(char op)
{
if (op == '+' || op == '-')
return 2;
else if (op == '*' || op == '/')
return 1;
else if (op == '(' || op == ')')
return 0;
else
return -1;
}
void convertPostfix(char* midfix, char* postfix)
{
char opStack[10] = { 0 };
int postfix_pointer = 0;
int i = 0;
//for (size_t i = 0; i < sizeof(midfix); i++)
while (midfix[i] != '\0')
{
if (midfix[i] > 0x30 && midfix[i] < 0x39) {
postfix[postfix_pointer++] = midfix[i];
}
else
{
if (isEmpty())
{
push(opStack, midfix[i]);
}
else
{
while (operatorPriority(peek(opStack)) < operatorPriority(midfix[i]))
{
postfix[postfix_pointer++] = pop(opStack);
}
if (operatorPriority(peek(opStack)) > operatorPriority(midfix[i]))
{
push(opStack, midfix[i]);
}
}
}
i++;
}
while (!isEmpty(opStack))
{
postfix[postfix_pointer++] = pop(opStack);
}
}
int main(void)
{
char midfix[30] = { '2','+' ,'5','*','3' };
char postfix[30] = { 0 };
printf("midfix: %s\n", midfix);
convertPostfix(midfix, postfix);
printf("postfix: %s\n", postfix);
return 0;
}
괄호 포함한 후위연산식 변환은 다음 글에..
반응형
'C Programming' 카테고리의 다른 글
[C Programming] Stack (0) | 2024.03.14 |
---|---|
[C] 중위연산식 후위연산식으로 바꾸기 2 (0) | 2024.03.03 |
[Linux] C 프로그램의 빌드 과정 살펴보기 (1) | 2024.02.08 |
[C] C언어는 왜 쓰는가? (0) | 2024.02.02 |
[C]아스키코드를 이용하여 알파벳을 입력받고 10진수로 변환출력 (1) | 2023.10.23 |