본문 바로가기
C Programming

[C] 중위연산식 후위연산식으로 바꾸기 1

by TYB 2024. 3. 3.
반응형

오랜만에 C 연습 좀 해봅싀당

 

 

중위 표기법과 후위 표기법

1. 개념 1-1. 중위 표기법이란? 1-2. 후위 표기법이란? 2. 중위 표기식을 후위 표기식으로 바꾸는 법 2-1. 괄호가 없는 경우 2-2. 괄호가 있는 경우 3. 계산 3-1. 후위 표기식을 사칙연산하는 법 1. 개념 1-

todaycode.tistory.com

 

 

후위 표기법 규칙에 대한 건 윗 블로그를 보며 복습했슴다!

 

 

일단 괄호 없이 동작하는 후위 연산자 변환 프로그램 만들어봅니다

 

/*
괄호 없을 때 중위 연산자 입력받아서 후위 연산자로 출력해주는 프로그램
*/

#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] 중위연산식 후위연산식으로 바꾸기 2

[C] 중위연산식 후위연산식으로 바꾸기 1 오랜만에 C 연습 좀 해봅싀당 중위 표기법과 후위 표기법 1. 개념 1-1. 중위 표기법이란? 1-2. 후위 표기법이란? 2. 중위 표기식을 후위 표기식으로 바꾸는

program-developers-story.tistory.com

 

반응형