#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef int element;
typedef struct StackNode {
element item;
struct StackNode *link;
}StackNode;
typedef struct {
StackNode *top;
} LinkedStackType;
void init(LinkedStackType *s)
{
s->top = NULL;
}
int is_empty(LinkedStackType *s)
{
return (s->top == NULL);
}
void push(LinkedStackType *s, element item)
{
StackNode *temp = (StackNode *)malloc(sizeof(StackNode));
if(temp == NULL)
{
fprintf(stderr, "메모리 할당 오류\n");
return;
}
else
{
temp->item = item;
temp->link = s->top;
s->top = temp;
}
}
element pop(LinkedStackType *s)
{
if(is_empty(s))
{
fprintf(stderr, "스택이 비어있음\n");
exit(1);
}
else
{
StackNode *temp = s->top;
element item = temp->item;
s->top = s->top->link;
free(temp);
return item;
}
}
element peek(LinkedStackType *s)
{
if(is_empty(s))
{
fprintf(stderr, "스택이 비어있음\n");
exit(1);
}
else
{
return s->top->item;
}
}
int main(void)
{
int a,i;
LinkedStackType s;
StackNode *b = NULL;
init(&s);
while(1)
{
printf("입력: ");
scanf("%d", &a);
if(a == -1)
{
printf("출력: %d\n", pop(&s));
}
else if(a > 0)
{
if(is_empty(&s) !=0)
{
push(&s, a);
}
if(is_empty(&s) ==0)
{
if(peek(&s) >= a)//아래에 있는 것 보다 입력받는 수가 작아야한다.
push(&s, a);
else
printf("Error!\n");
}
}
else if(a == 0)
{
}
}
}
스택으로 탑쌓기 프로그램을 만들었어
메인에서 변수 a가 내가 쌓을 벽돌의 사이즈야.
위에 쌓이는 벽돌의 사이즈가 이미 쌓여있는 벽돌의 사이즈보다 크면 쌓을 수 없어.
문제는 a가 0을 입력받으면 스택의 모든 내용을 띄어야되는데.. 그걸 어떻게할지 모르겠어ㅠㅠ
도와줘 갤러들아
하노이의 탑 문제네요. 그런데 이만큼 짜놓고 뭐가 어렵다는거죠? 뭘 어려워하는지 모르겠네요. 스택 상태를 출력하는 게 어렵다는 얘기신가요?
그냥 클래스구축하지
애초에 스택에 쌓은 것도 없는데 뭘 출력시킨다는거죠?? 쌓고나서 출력시키게 짜셔야지
아 반복문이 있네
스택안이 null이 될 때까지 pop시키면서 출력시키면 되지 않나요?