๐ก ์ด๋ฒ์๋ ํฌ์ธํฐ ๊ธฐ๋ฐ ์คํ ์ฝ์ ๋ฐ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํด๋ณด๊ฒ ๋ค.
๋ฌธ์
๐ก ๋ฐฐ์ด [1, 2, 3, 7, 9]์ ์ฝ์ ํ๊ณ ๋ฐฐ์ด [1, 2, 3, 7]๋ก ๋ณ๊ฒฝํ์์ค.
๋น์ฐํ ์๋ ๋ฌธ์ ๊ธฐ์ ๋์ถฉ ๋ด๊ฐ ๋ง๋ค์๋ค.
ํด๋ต
#include <stdio.h>
#include <stdlib.h>
#define INF 99999999
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct Stack {
Node *top;
} Stack;
void push(Stack *stack, int data) {
Node* node = (Node*) malloc(sizeof(Node));
node->data = data;
node->next = stack->top;
stack->top = node;
}
int pop(Stack *stack) {
if (stack->top == NULL) {
printf("์คํ ์ธ๋ํ๋ก์ฐ๊ฐ ๋ฐ์ํ์ต๋๋ค.\\n");
return -INF;
}
Node *node = stack->top;
int data = node->data;
stack->top = node->next;
free(node);
return data;
}
void show(Stack *stack) {
Node *cur = stack->top;
printf("--- ์คํ์ ์ต์๋จ --- \\n");
while (cur != NULL) {
printf("%d\\n", cur->data);
cur = cur->next;
}
printf("--- ์คํ์ ์ตํ๋จ --- \\n");
}
int main(void) {
Stack stack;
stack.top = NULL; // ๋ฐ๋์ NULL๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
show(&stack);
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
push(&stack, 7);
push(&stack, 9);
pop(&stack);
show(&stack);
return 0;
}
์ค๋ช
๋ฐฐ์ด์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ์ฝ๋ฉํ๊ธฐ์๋ ์ฌ์ฐ๋(๋ด ๊ด์ ) SIZE ๋ฅผ ๋ฏธ๋ฆฌ ํ ๋นํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ด์ ์์๋ ์ข์ง ์๋ค๊ณ ํ ์ ์๋ค.
๊ทธ๋ฌ๋ ํฌ์ธํฐ ๊ธฐ๋ฐ์ผ๋ก ์คํ์ ์์ผ๋ฉด ๋ฐ๋ก ์ฌ์ด์ฆ๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋์ง ์์๋ ๋์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์ ์ข๋ค๊ณ ํ ์ ์๋ค.
์จ์๋์ด ํฌ์ธํฐ ์ ์์ด๋ค๊ณ ํ๋๋ฐ ๋งค ๊ฐ์๋ง๋ค ํฌ์ธํฐ๊ฐ ๋ค์ด๊ฐ๊ณ ์๋ค.
๋๋ฌผ์ ๋จธ๊ธ๊ณ ์ฝ๋๋ฅผ ํ๋์ฉ ์ดํด๋ณด์. เผเบถโฟเผเบถ
next ๋ฐ top ์ค์
typedef struct Node {
int data;
struct Node *next; // ๋ค์ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ์ ์๊ฒ next๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
} Node;
typedef struct Stack {
Node *top; // ๋ชจ๋ ์คํ์ top์ด๋ผ๋ node๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋๋ค.
} Stack;
push ํจ์
void push(Stack *stack, int data) {
Node* node = (Node*) malloc(sizeof(Node));
node->data = data; // node์ ๋ฐ์ดํฐ๋ฅผ data๋ก ์ค์ ํด์ค๋ค.
node->next = stack->top; // ํ์ฌ stack์ top์ด ๋ ์ ์๊ฒ ํ๋ค.
stack->top = node; // ํญ์ ์ฒ์ ๋ค์ด์จ ๋
ธ๋๊ฐ ํ์ด๊ธฐ ๋๋ฌธ์ ํ์ผ๋ก ํด์ค
}
pop ํจ์
int pop(Stack *stack) {
if (stack->top == NULL) {
printf("์คํ ์ธ๋ํ๋ก์ฐ๊ฐ ๋ฐ์ํ์ต๋๋ค.\\n");
return -INF;
}
Node *node = stack->top; // ์ต์๋จ ๋
ธ๋์ ์ ์ ๋ฃ์ด๋๋ค.
int data = node->data; // ์ต์๋จ ๋
ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด์ค๋ค.
stack->top = node->next; // ์คํ์ ํ์ ์ต์๋จ ๋
ธ๋์ ๊ทธ ๋ค์ next๋ก ํ ๋นํด์ค๋ค.
free(node); // node ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ํด์ค๋ค.
return data;
}
main ํจ์
int main(void) {
Stack stack;
stack.top = NULL; // ๋ฐ๋์ NULL๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
show(&stack); // ๋ชจ๋ ํจ์์์ ์คํ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
push(&stack, 7);
push(&stack, 9);
pop(&stack);
show(&stack);
return 0;
}
๋ง์น๋ฉฐ..
์ ๋ฒ ๋ฆฌ์คํธ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ์ดํดํ๊ธฐ ์ฌ์ ์ผ๋ C์ธ์ด๋ ์ ๋ง ์ด๋ ต๊ตฌ๋ ๊ณ์ ๋๋ผ๋ ์ค์ด๋ค..ใ ใ