#include<stdio.h>
#define MAX 2
int stack[MAX];
int top=-1;
void push(int value){
if(top>= MAX-1){
printf("Errorn");
return;
}
stack[++top]=value;
}
int pop(void){
//printf("stack[top] => %d ,top=> %d n",stack[top],top);
if(top<0){
printf("Error!!n");
return 0;
}
return stack[top--];
}
int main(int* argc,char* argv[]){
push(3);
push(4);
push(5);
printf("%d ----n",pop());
printf("%d ---n",pop());
push(5);
printf("%d --n",pop());
printf("%d -n",pop());
return 1;
}
// 스텍을 여러개 사용할 수 있는 예
#include<stdio.h>
#define MAX 1000
void push(int value,int *stack,int *top){
if(*top >= MAX-1){
printf("Errorn");
return;
}
stack[++(*top)]=value;
}
int pop(int *stack,int *top){
//printf("stack[top] => %d ,top=> %d n",stack[top],top);
if(*top <0){
//printf("Error!!n");
return -1;
}
return stack[(*top)--];
}
int main(int* argc,char* argv[]){
int stack1[MAX];
int top1=-1;
int *stack2;
int top2=-1;
stack2 =(int*)malloc(MAX*sizeof(int));
push(10,stack1,&top1);
printf("%dn", pop(stack1,&top1));
return 1;
}



//응용예 2진수 구하기.
#include<stdio.h>
#define MAX 1000
int stack[MAX];
int top=-1;
void push(int value){
if(top>= MAX-1){
printf("Errorn");
return;
}
stack[++top]=value;
}
int pop(void){
//printf("stack[top] => %d ,top=> %d n",stack[top],top);
if(top<0){
//printf("Error!!n");
return -1;
}
return stack[top--];
}
int main(int* argc,char* argv[]){
int su = 23; // 0110
int tmp=0;
while(su>0){
push(su%2);
su/=2;
}
while(1){
tmp=pop();
if(tmp>=0)
printf("%d",tmp);
else
break;
}
return 1;
}