Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

nomad-programmer

[C] 동적 할당으로 간단히 구현해본 stack 본문

Programming/C

[C] 동적 할당으로 간단히 구현해본 stack

scii 2020. 6. 13. 16:02
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdbool.h>

void SetData(unsigned short** dst, unsigned short** src, const short size) {
    for (int i = 0; i < size; i++) {
        *(*(dst)+i) = *(*(src)+i);
    }
}

void Push(unsigned short** ptr, short* curt, const short value) {
    (*curt)++;
    unsigned short* new_data = (unsigned short*)malloc(((*curt) + 1) * sizeof(short));
    SetData(&new_data, ptr, *curt);
    *(new_data + (*curt)) = value;
    if (NULL != (*ptr)) {
        free(*ptr);
    }
    *ptr = new_data;
}

short Pop(unsigned short** ptr, short* curt) {
    if ((*curt) == -1) {
        return -1;
    }
    int tmp;
    tmp = *(*(ptr)+(*curt));
    (*curt)--;
    if ((*curt) < 0) {
        free(*ptr);
        *ptr = NULL;
        return tmp;
    }
    unsigned short* new_data = (unsigned short*)malloc(((*curt) + 1) * sizeof(short));
    SetData(&new_data, ptr, (*curt+1));
    free(*ptr);
    *ptr = new_data;
    return tmp;
}


int main(void) {
    unsigned short* stack = NULL;
    short curt = -1;

    short tmp;
    while (true) {
        fputs("stack에 저장할 데이터(press -1 to exit): ", stdout);
        scanf_s("%hd", &tmp);
        if (tmp == -1) {
            break;
        }
        Push(&stack, &curt, tmp);
    }

    puts("");
    while (true) {
        tmp = Pop(&stack, &curt);
        if(tmp < 0){
            break;
        }
        printf("stack에 저장 된 값: %hd\n", tmp);
    }

    if (NULL != stack) {
        free(stack);
    }

    return 0;
}

// 결과
/*

stack에 저장할 데이터(press -1 to exit): 1
stack에 저장할 데이터(press -1 to exit): 5
stack에 저장할 데이터(press -1 to exit): 7
stack에 저장할 데이터(press -1 to exit): 9
stack에 저장할 데이터(press -1 to exit): 15
stack에 저장할 데이터(press -1 to exit): 255
stack에 저장할 데이터(press -1 to exit): 1024
stack에 저장할 데이터(press -1 to exit): -1

stack에 저장 된 값: 1024
stack에 저장 된 값: 255
stack에 저장 된 값: 15
stack에 저장 된 값: 9
stack에 저장 된 값: 7
stack에 저장 된 값: 5
stack에 저장 된 값: 1

*/

동적 할당으로 정말 간단히 구현해 본 stack 자료구조 같은 데이터 저장

Comments