[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;
}
'๊ฐ๋ฐ > CS50 ์ฝ์นญ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS50 ์ฝ์นญ์คํฐ๋] 5์ฃผ์ฐจ_๋ฉ๋ชจ๋ฆฌ (0) | 2021.03.01 |
---|---|
[CS50 ์ฝ์นญ์คํฐ๋] 4์ฃผ์ฐจ_์๊ณ ๋ฆฌ์ฆ (0) | 2021.02.28 |
[CS50 ์ฝ์นญ์คํฐ๋] 3์ฃผ์ฐจ_๋ฐฐ์ด (0) | 2021.02.27 |
[CS50 ์ฝ์นญ์คํฐ๋] 2์ฃผ์ฐจ_C์ธ์ด (0) | 2021.02.25 |
[CS50 ์ฝ์นญ์คํฐ๋] 1์ฃผ์ฐจ_์ปดํจํ ์ฌ๊ณ (0) | 2021.02.25 |