스택은 데이터가 한쪽 끝에서만 삽입 및 제거되는 선형 데이터 구조입니다.
알고리즘
푸시( ) −
에 대한 알고리즘은 다음과 같습니다.- 스택 오버플로를 확인합니다.
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