데이터 구조 - 접미사 식 접미사 식 (C 언어)

2024 단어
데이터 구조 - 접미사 식 접미사 식 (C 언어)
기능 구현 절차:
1. 비 연산 자 를 만 나 직접 출력 하기;2. 창고 가 비어 있 을 때 연산 자 를 만 나 창고 에 들어간다.3. 왼쪽 괄호 를 만 나 창고 에 넣 기;4. 오른쪽 괄호 를 만 나 스 택 작업 을 수행 하고 스 택 에서 나 오 는 요 소 를 출력 합 니 다. 스 택 이 왼쪽 괄호 가 나 올 때 까지 왼쪽 괄호 는 출력 하지 않 습 니 다.5. 다른 연산 자 '+' - '*' / '를 만 났 을 때 모든 우선 순위 가 이 연산 자 보다 크 거나 같은 스 택 꼭대기 요 소 를 팝 업 한 다음 에 이 연산 자 를 스 택 에 넣 습 니 다.6. 마지막 으로 스 택 에 있 는 요 소 를 스 택 에서 순서대로 출력 합 니 다.
//          

#include 
#include

#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100


typedef struct          //      
{
	char *base;
	char *top;
	int stacksize;
}SqStack;
/*********   ********/ 
int InitStack(SqStack &S)//    
{
	S.base=(char*)malloc(sizeof(char)*MAXSIZE);
	if(!S.base) exit(OVERFLOW);
	S.top=S.base;
	S.stacksize=MAXSIZE;
	return OK;
}
int Push(SqStack &S,char e)//   
{
	if(S.top-S.base==S.stacksize) return ERROR;//   
	*S.top=e;  //  e    ,     1; 
	S.top++;
	return OK;
 } 
int Pop(SqStack &S,char &e)//   
{
	if(S.top==S.base)  return ERROR;   //   
	--S.top;//      ,       e;
	e=*S.top; 
	return OK;
}
char GetTop(SqStack S)//      
{
	if(S.top!=S.base)//    
	return *(S.top-1);//        ,       
}
int In(char e)//             
{
	if(e=='+'||e=='-'||e=='*'||e=='/'||e=='('||e==')'||e=='#')
	    return 1;//  
	else 
	    return 0; //   
}
char Compare(char a,char b)//          
{
	char f;
	if(a=='+'||a=='-')
	{
		if(b=='+'||b=='-')
		    f='>';
		else if(b=='*'||b=='/')
		    f='';
	}
	else if(a=='#')
	{
		if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')
		   f=''){
		    	Pop(S,c);
		    	printf("%c",c);
		    	t=Compare(GetTop(S),ch);
			}
			Push(S,ch);	      
		}
		ch=getchar();		 
	}
 } 
int main(){
	SqStack S;
	InitStack(S);      //       
	
	Eva(S);             //     
	
	return 0;
}

좋은 웹페이지 즐겨찾기