c언어 스택에 대해서 질문 드립니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
typedef char Element;
Element data[MAX_STACK_SIZE];
int top;
void error( char str[] )
{
printf("%s\n",str);
exit(1);
}
void init_stack() { top= -1;}
int is_empty() { return top == -1; }
int is_full() { return top == MAX_STACK_SIZE-1; }
int size() { return top+1;}
void push ( Element e )
{
if( is_full() )
error("스택 포화 에러");
data[++top] = e;
}
Element pop ()
{
if( is_empty() )
error("스택 공백 에러");
return data[top--];
}
Element peek()
{
if( is_empty() )
error ("스택 공백 에러");
return data[top];
}
이게 일단 스택에서 사용되는 함수 써둔거구요 문자열을 입력받아서 그대로 역으로 출력하고싶은데
분명 배열 형태로 문자를 받아서 push에 넣어 스택에 저장한뒤에 그걸 pop으로 출력해내는 구조인건
머릿속에 그려지는데 뭔가 만드려니까 손이 안잡히네요..
int main()
{
int i;
init_stack();
char a[100];
printf("문자열 입력 >");
scanf("%s", a);
for(i=0;a[i]!='\0';i++)
{
push(a);
}
for(i=0;i<100;i++)
{
printf("%s", pop(a));
}
return 0;
}
도저히 감이 안와서 이렇게 끄적여봤는데 역시나 컴파일이 안되네요 push(a); 이부분이랑
void push ( Element e ) 이 부분에서 오류가 나는거 같은데 어떻게 고쳐야할지 감이 안잡혀요 도와주세요 ㅠㅠ
안녕하세요.
코드를 보니 push에 들어가는 parameter가 Element로 실제로는 char네요. 그러면 이제 push를 호출하는 실제 부분을 보면 a라는 문자열을 받아 for문을 돌리시는데 인자에 a자체의 char*를 넘기셨네요. 아마 코딩 실수 이신거같은데 for문은 돌리셨으니 a[i]로 바꾸시면 될 거 같고 흠 보니 밑에 pop이라는 func에 parameter는 없는데 넣으셔서 거기도 에러네요. 빼주셔야 합니다.