Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 언어의 스택 표현식 평가 설명

<시간/>

스택은 데이터가 한쪽 끝에서만 삽입 및 제거되는 선형 데이터 구조입니다.

알고리즘

푸시( ) −

에 대한 알고리즘은 다음과 같습니다.
  • 스택 오버플로를 확인합니다.
if (top = = n-1)
printf("stack over flow");
  • 그렇지 않으면 스택에 요소를 삽입하세요.
top ++
a[top] = item

다음은 팝( )에 대한 알고리즘입니다. -

  • 스택 언더플로를 확인합니다.
if ( top = = -1)
printf( "stack under flow");

그렇지 않으면 스택에서 요소를 삭제합니다.

item = a[top]
top --

다음은 디스플레이( )에 대한 알고리즘입니다. -

if (top == -1)
printf ("stack is empty");

그렇지 않으면 아래 언급된 알고리즘을 따르십시오.

for (i=0; i<top; i++)
printf ("%d", a[i]);

스택 적용

C 언어에서 스택 표현식의 변환을 이해합시다.

식 - 피연산자와 연산의 합법적인 조합입니다.

표현의 종류

변환 및 평가를 수행할 수 있는 C 언어에는 세 가지 유형의 표현식이 있습니다. 아래에 설명되어 있습니다 -

  • 중위 표현식 - 연산자는 피연산자 사이에 있습니다. 예를 들어, A+B

  • 접두사 표현식 - 연산자는 피연산자 앞에 있습니다. 예:+AB

  • 접미사 식 - 연산자는 피연산자 뒤에 있습니다. 예:AB+

후위 표현의 평가

알고리즘

입력 문자열을 왼쪽에서 오른쪽으로 스캔합니다.

각 입력 기호에 대해

  • 숫자이면 스택에 푸시합니다.

  • 연산자인 경우 스택에서 맨 위의 두 콘텐츠를 꺼내서 연산자를 적용합니다. 나중에 결과를 스택에 푸시합니다.

  • 입력기호가 '\0'이면 스택을 비운다.

프로그램

다음은 후위 표현식 평가를 위한 C 프로그램입니다 -

#include<stdio.h>
int top = -1, stack [100];
main ( ){
   char a[50], ch;
   int i,op1,op2,res,x;
   void push (int);
   int pop( );
   int eval (char, int, int);
   printf("enter a postfix expression:");
   gets (a);
   for(i=0; a[i]!='\0'; i++){
      ch = a[i];
      if (ch>='0' && ch<='9')
         push('0');
      else{
         op2 = pop ( );
         op1 = pop ( );
         res = eval (ch, op1, op2);
         push (res);
      }
   }
   x = pop ( );
   printf("evaluated value = %d", x);
   getch ( );
}
void push (int n){
   top++;
   stack [top] = n;
}
int pop ( ){
   int res ;
   res = stack [top];
   top--;
   return res;
}
int eval (char ch, int op1, int op2){
   switch (ch){
      case '+' : return (op1+op2);
      case '-' : return (op1-op2);
      case '*' : return (op1*op2);
      case '/' : return (op1/op2);
   }
}

출력

위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다 -

Run 1:
enter a postfix expression:45+
evaluated value = 9
Run 2:
enter a postfix expression: 3 5 2 * +
evaluated value = 13