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