1. 초보자를 위한 C언어 300제
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int push(int value);
int pop(int* value);
#define STACK_MAX 100
typedef struct tagStack
{
int array[STACK_MAX];
int top;
int bottom;
}STACK;
STACK s; // 구조체 변수 (전역)
void main(void)
{
char buff[100], tmp[100];
char* op = "+-*/%";
int index;
int value1 = 0, value2 = 0;
s.top = STACK_MAX;
puts("계산식을 1*2처럼 입력하고 엔터키치세요");
puts("아무것도 입력하지 않으면 계산이 종료");
for (;;)
{
printf("계산식:");
gets(buff);
if (strlen(buff) == 0)break;
memset(tmp, 0, sizeof(tmp));
index = strcspn(buff, op);
memcpy(tmp, buff, index);
value1 = atoi(tmp);
value2 = atoi(&buff[index + 1]);
switch (buff[index])
{
case'+':value1 += value2; break;
case'-':value1 -= value2; break;
case'*':value1 *= value2; break;
case'/':value1 /= value2; break;
case'%':value1 %= value2; break;
default:
puts("잘못된 연산자 사용");
continue;
}
if (push(value1) == -1) puts("더 이상 저장 불가능");
printf("%s = %d, s.top = %d \n\n", buff, value1, s.top);
}
value1 = 0;
for (;;)
{
if (pop(&value2) == -1) break;
value1 += value2;
}
printf("계산의 총합 : %d\n", value1);
}
int push(int value)
{
if (s.top == 0) return -1;
s.array[--s.top] = value;
return 0;
}
int pop(int* value)
{
if (s.top == STACK_MAX) return -1;
*value = s.array[s.top++];
return 0;
}
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
2. 실무자를 위한 C언어 100제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#define MAXVAL 100
int stack[MAXVAL]; //stack
int sp = 0; //stack pointer
void push(int v)
{
if (sp < MAXVAL) stack[sp++] = v;
else
{
printf("stack full\n");
}
}
int pop()
{
if (sp > 0) return stack[--sp];
else
{
printf("error: stack empty\n");
return 0;
}
}
void printStack()
{
printf("Stack : ");
for (int i = 0; i < sp; i++)
printf("%8d", stack[i]);
printf("\n");
}
int main()
{
int c, v;
while (1)
{
printf("Operation: i(insert), d(Delete), q(quit) : ");
c = _getche();
printf("\n");
switch (c)
{
case'i':
printf("Enter a number: ");
scanf("%d", &v);
push(v);
break;
case'd':
printf("%d removed\n", pop());
break;
case'q':
return 0;
}
printStack();
}
}