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; }
이부분에서 { 다음에 .을 지우고 해보세용
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력