알고리즘 디자인 학습: 스 택 알고리즘

1687 단어 알고리즘 설계
(1) 제목: C 언어 에서 산술 표현 식 의 괄호 는 작은 괄호 만 있 습 니 다.알고리즘 을 작성 하여 표현 식 의 괄호 가 올 바 르 게 일치 하 는 지 판단 합 니 다. 표현 식 에는 문자 배열 exp [] 에 존재 합 니 다. (요 소 는 배열 작은 표지 1 부터 저장 합 니 다) 문자 개 수 는 n 입 니 다.
분석: 즉, 문 제 를 해결 하 는 과정 에서 하나의 상태 가 나 타 났 지만 기 존의 조건 으로 현재 의 상태 가 해결 할 수 있 는 지 판단 할 수 없 으 므 로 기록 하고 나중에 현재 상 태 를 해결 할 수 있 는 조건 이 나타 나 면 돌아 와 서 해결 해 야 한다.스 택 으로 해결 합 니 다. 스 택 은 기억 기능 을 가지 고 있 습 니 다. 이것 은 스 택 FILO 의 연장 입 니 다.
코드:
int match(char exp[], int n)
{
	char stack[maxSize];	  //         
	int top = -1;

	int i;
	for ( i = 1; i <= n; ++ i )
	{
		if ('(' == exp[i])			 //  ‘(’,       ,
		{
			stack[ ++ top] = '(';	  //    
		}

		if (')' == exp[i])
		{
			if ( -1 == top)	   //    ‘)’    ,    ,  0
			{
				return 0;
			}
			else
			{
				top --;	  //   ,  。     ‘(’ ‘)’   。
			}
		}
	}

	if ( -1 == top )	 //  ,        
	{
		return 1;
	}
	else			   //       
	{
		return 0;
	}
}

(2) 제목: 노드 가 없 는 단일 체인 시트 로 체인 스 택 을 저장 하고 디자인 초기 화, 빈 스 택 판단, 스 택 과 스 택 등 알고리즘
분석: 앞장 서지 않 는 단일 체인 표 lst 가 비어 있 는 조건 은 lst = = NULL 이 고 스 택 출입 은 모두 표 머리 에서 이 루어 집 니 다.
//     
void initStackl(LNode *&lst)
{
	st = NULL;
}
//    
int isEmptyl(LNode *lst)
{
	if (NULL == lst)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
//  
void Pushl(LNode *&lst, int x)
{
	LNode *p;
	p = (LNode *)malloc(sizeof(LNode));
	p->next = NULL;

	p->data = x;
	p->next = lst;   //    
       lst = p;
}
//  
int Pop(LNode *&lst, int &x)    //            
{
   LNode *p;

   if (NULL == lst)
   {
	   return 0;
   }
   //      
    p = lst; //p          
    x = p->data; 
    lst = p->next; 
    free(p); 
    return 1;
}

좋은 웹페이지 즐겨찾기