ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C] 스택 구현하기 예제
    IT Do/[C] 2024. 1. 29. 01:53
    반응형


    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();
    }
    }

    반응형

    'IT Do > [C]' 카테고리의 다른 글

    [C] 백준 10813 C언어  (0) 2024.02.15
    [C] 백준 2480 조건문  (0) 2024.01.31
    [C] 열거형 enum 예제  (1) 2024.01.26
    [C] CRC-16 구하기  (1) 2024.01.10
    [C] 몬테카를로 시뮬레이션과 겹치지 않는 랜덤 숫자 예제  (0) 2024.01.10
Designed by Tistory.