๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/CS50 ์ฝ”์นญ์Šคํ„ฐ๋””

[CS50 ์ฝ”์นญ์Šคํ„ฐ๋””] 6์ฃผ์ฐจ_์ž๋ฃŒ๊ตฌ์กฐ

by - ์˜คํŠธ - 2021. 3. 2.

 

[6์ฃผ์ฐจ ๊ฐœ๋…]

โœ”๏ธ malloc๊ณผ ํฌ์ธํ„ฐ ๋ณต์Šต - ํฌ์ธํ„ฐ, malloc

 

โœ”๏ธ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ์กฐ์ •ํ•˜๊ธฐ - malloc, realloc

์ƒˆ๋กœ์šด ๊ณต๊ฐ„์— ํฐ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€ :  malloc, realloc

 

โœ”๏ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ: ๋„์ž…

๋ฐฐ์—ด : ๊ฐ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์—ฐ์ด์–ด ์ €์žฅ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ : ๊ฐ ๊ฐ’์ด ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ฐ”๋กœ ๋‹ค์Œ ๊ฐ’์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋งŒ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์—ฌ์ „ํžˆ ๊ฐ’์„ ์—ฐ์ด์–ด์„œ ์ฝ์–ด๋“ค์ผ ์ˆ˜ ์žˆ์Œ. ๊ฐ ์ธ๋ฑ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์—์„œ ์ž์‹ ์˜ ๊ฐ’๊ณผ ํ•จ๊ป˜ ๋ฐ”๋กœ ๋‹ค์Œ ๊ฐ’์˜ ์ฃผ์†Œ(ํฌ์ธํ„ฐ)๋ฅผ ์ €์žฅ

 

โœ”๏ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ: ์ฝ”๋”ฉ

 

โœ”๏ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ: ์‹œ์—ฐ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ๋ฐฐ์—ด

์žฅ์  : ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š์•„๋„ ๋จ

๋‹จ์  : ์ž„์˜ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ

 

โœ”๏ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ: ํŠธ๋ฆฌ - ํŠธ๋ฆฌ, ๋ฃจํŠธ

ํŠธ๋ฆฌ : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

๋ฃจํŠธ : ๊ฐ€์žฅ ๋†’์€ ์ธต์—์„œ ํŠธ๋ฆฌ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋…ธ๋“œ

๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ์•„๋ž˜ ์ธต์˜ ๋…ธ๋“œ(=์ž์‹ ๋…ธ๋“œ)๋“ค์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ

 

โœ”๏ธ ํ•ด์‹œ ํ…Œ์ด๋ธ” -  ํ•ด์‹œ ํ…Œ์ด๋ธ”, ํ•ด์‹œ ํ•จ์ˆ˜

ํ•ด์‹œ ํ…Œ์ด๋ธ” : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐฐ์—ด

ํ•ด์‹œ ํ•จ์ˆ˜ : ๊ฐ ๊ฐ’๋“ค์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ค ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธฐ๋Š” ์ง€๊ฐ€ ๊ฒฐ์ •

 

โœ”๏ธ ํŠธ๋ผ์ด

ํŠธ๋ผ์ด : ๊ธฐ๋ณธ์ ์œผ๋กœ ‘ํŠธ๋ฆฌ’ ํ˜•ํƒœ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ, ๊ฐ ๋…ธ๋“œ๊ฐ€ ‘๋ฐฐ์—ด’๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Œ

ํŠธ๋ผ์ด์—์„œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ‘๋ฌธ์ž์—ด์˜ ๊ธธ์ด’์— ์˜ํ•ด ํ•œ์ •

 

โœ”๏ธ ์Šคํƒ, ํ, ๋”•์…”๋„ˆ๋ฆฌ

์Šคํƒ : ‘์„ ์ž… ์„ ์ถœ’ ๋˜๋Š” ‘FIFO’ / ๋ฐฐ์—ด์ด๋‚˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

ํ : ‘ํ›„์ž… ์„ ์ถœ’ ๋˜๋Š” ‘LIFO’ / ๋ฐฐ์—ด์ด๋‚˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

๋”•์…”๋„ˆ๋ฆฌ : ‘ํ‚ค’์™€ ‘๊ฐ’’ /  ‘ํ•ด์‹œ ํ…Œ์ด๋ธ”’

 

 

[6์ฃผ์ฐจ ํŒ€๋ณ„๋ฏธ์…˜]

#include <stdio.h>
#include <stdlib.h>

typedef struct stack{
    int top;
    int capacity;
    int* array;
} Stack;

Stack* createStack(int capacity) {
    Stack* stack = (Stack*)malloc(sizeof(Stack));
    stack->capacity = capacity;
    stack->top = -1;
    stack->array = (int *)malloc(stack->capacity*sizeof(int));
    return stack;
}

int isFull(Stack* stack) {
    return stack->top == stack->capacity-1;
}

int isEmpty(Stack* stack) {
    return stack->top == -1;
}

void push(Stack* stack, int item) {
    if (isFull(stack))
        return;
    stack->array[++stack->top] = item;
    printf("%d pushed to stack\n", item);
}

int pop(Stack* stack) { // ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ
    if (isEmpty(stack)) 
        return -9999;
    return stack->array[stack->top--];
}

int peek(Stack* stack) { // ์Šคํƒ์—์„œ top์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์Œ
    if (isEmpty(stack)) 
        return -9999;
    int data = stack->array[stack->top];
    return data;
}

int main() {
    Stack* stack = createStack(100);

    push(stack, 10);
    push(stack, 20);
    push(stack, 30);
    push(stack, 40);

    printf("%d pop from stack\n", pop(stack));
    printf("%d pop from stack\n", pop(stack));

    push(stack, 50);
    printf("%d pop from stack\n", pop(stack));
    printf("%d pop from stack\n", pop(stack));
    printf("%d pop from stack\n", pop(stack));
    printf("%d pop from stack\n", pop(stack));
    return 0;
}