데이터 구조 - 스 택 괄호 일치 실현
2655 단어 데이터 구조 와 알고리즘
진정 으로 공부 한 후에 야 이른바 아 줌 마 들 이 좀 더 열심히 공부 한 것 에 불과 하 다 는 것 을 알 게 되 었 다.예전 에는 왜 직접 하지 않 았 는 지 모 르 겠 지만, 원래 이렇게 간단 하 다.
#include
#include
#include
#include
/** **/
typedef struct Data{
char c;
};
typedef struct Stack{
Data data;
Stack *top; //
};
/** **/
void InitStack(Stack *S){
S->top = NULL;
}
/** **/
int StackEmpty(Stack S){
// 1 0
if(S.top==NULL) return 1;
else return 0;
}
/** **/
void GetTop(Stack S,Data *d){
if(StackEmpty(S)==1)
printf("It's an empty stack!");
else{
d->c = S.top->data.c;
}
}
/** **/
void PushStack(Stack *S,Data d){
Stack* p = (Stack *)malloc(sizeof(Stack));
p->data.c = d.c;
p->top = S->top;
S->top = p;
}
/** **/
void PopStack(Stack *S,Data *d){
if(StackEmpty(*S)==1){
printf("It's an empty stack!
");
}else{
Stack *p = S->top;
S->top = p->top;
d->c = p->data.c;
}
}
/** **/
void ClearStack(Stack *S){
if(StackEmpty(*S)==1){
printf("It's already an empty stack!
");
}else{
S->top = NULL;
}
}
/** **/
void PrintStack(Stack S){
if(StackEmpty(S)==1){
printf("It's an empty stack!
");
}else{
printf("name----age
");
while(S.top!=NULL){
printf("%s
",S.top->data.c);
S.top = S.top->top;
}
}
}
/** **/
int Match(Data r,Data s){
// 1
if(r.c==')'&&s.c=='('){
return 1;
}else if(r.c=='}'&&s.c=='{'){
return 1;
}else if(r.c==']'&&s.c=='['){
return 1;
}else{
return 0;
}
}
/** **/
void CheckMatch(char *m,Stack *S){
Data r,s;
while(*m){
switch (*m){
case '(':
case '{':
case '[':
s.c = *m;
PushStack(S,s);
*m++;
break;
case ')':
case '}':
case ']':
if(StackEmpty(*S)){
printf("Location %s can't match!
",*m);
return;
}
GetTop(*S,&s);
r.c = *m;
if(Match(r,s)){
PopStack(S,&s);
*m++;
}else{
printf("Location %c can't match!
",*m);
return;
}
default:
*m++;
}
}
if(StackEmpty(*S)){
printf("Match successfully!
");
}else{
printf("Can't match!Lack of right bracket!
");
}
}
void main(){
char d[12];
Stack S;
char *p;
printf("Input your expression:");
gets(d);
p = d; //
InitStack(&S);
CheckMatch(p,&S);
system("pause");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.