Stack 구현 관련 질문이요!

조회수 1198회

include

include

typedef struct stack* Stack; typedef char element;

struct stack { element* array; int size; int top; };

int IsEmpty(Stack S) { return (S->top<0); }

int IsFull(Stack S) { return ((S->top+1) == S->size); }

Stack createStack (int c) { Stack S = (Stack)malloc(sizeof(struct stack));

S->size = c;
S->top = -1;
S->array = (element *)malloc(sizeof(element) * c);

return S;

}

Stack makeEmptyStack(Stack S) {. S->top = -1;

return S;

}

void push (element X, Stack S) { if (IsFull(S)) { printf("공간 부족\n"); return; }

S->array[++(S->top)] = X;
printf("push finishde");

}

element pop(Stack S) {
if(IsEmpty(S)) { printf("스택에 아무 것도 없음\n"); return 0; }

return (char)S->array[(S->top)--];

}

void deleteStack(Stack S) {
free(S); return; }

void main () { element present; element str[100] = {0}; int i = 0, j = 0, count = 0; int rcount = 0, lcount = 0;

Stack S = createStack(100);


while(1) {
    scanf("%s", &present); // 문자 1개를 입력받음. 
    count++; // 나중에 출력할 때 이만큼 반복. 

    if (present == '!') exit(1); // '!'를 만나면 종료. 

    if (present == '(') { // '('를 만나면 카운트하고 push.
        lcount++;

        push(present, S);
    }

    else if (present == ')') { // ')'를 만나면 카운트 하고 '('가 나올 때까지 pop해서 str에 저장. 
        rcount++;

        while(pop(S) != '(') {
            str[j++] = pop(S);
        }
    }
    else if (present == '#') { // '#'를 만나면 right or wrong 띄우고 str에 저장해놨던거 순서대로 출력. 그 뒤 초기화하고 다시 실행. 

        if (rcount==lcount) {
            printf("right. ");
        }
        else {
            printf("wrong. ");
        }
        for(i = 0; i < count; i++) {
            printf("%c ", str[i]);      
        }
        printf("\n");

        //초기화 
        S = makeEmptyStack(S);

        for(i = 0; i < count; i++){
            str[i] = '\0';
        }
        rcount, lcount, j, count = 0;
        //
    }
    else push(present, S); // 아무런 해당 사항 없으면 그냥 push. 
    printf("1");
}
deleteStack(S);

}

a b ( c d ) e f # 이런식으로 입력하면

( 와 ) 의 개수를 비교해서 서로 같으면 right, 다르면 wrong 이라고 반환시켜준 후

a b d c e f 이런 순으로 출력시켜주는 프로그램을 짜고있는데 계속 프로그램이 멈춥니다.

그래서 제대로 실행 되고있는지 while문 루프를 돌 때마다 1이 출력되게 해놨는데 1이 1번도 출력이 안되네요. 대체 어디서부터 잘못된건지 이제는 잘 모르겠어요...

어떤게 문제일까요?

1 답변

  • Stack makeEmptyStack(Stack S) {. S->top = -1;
    
    return S;
    }
    

    이부분에서 { 다음에 .을 지우고 해보세용

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)