반응형
스택
- 선형 자료구조의 일종이다.
- 들어간 것이 먼저 나오는 후입선출(LIFO : Last In First Out)형식의 자료구조이다.
※ 사용 예로 브라우저의 뒤로가기 기능을 들 수 있다.
※ 위의 그림 기준으로 입력의 순서는 A → D → C, 출력은 C → D → A 순으로 이루어진다.
그럼 본격적으로 코드를 작성하기 전 활용할 구조체는 다음과 같다.
typedef struct Stack
{
int data;
struct Stack* NEXT;
}Stack;
Push (입력)
Stack* Push(Stack* node, int data)
{
Stack* newNode = (Stack*)malloc(sizeof(Stack));
newNode->data = data;
newNode->NEXT = node;
return newNode;
}
※ 새로 할당한 노드의 자기참조 변수는 앞에 만들어진 노드(인수로 받은 노드)를 대입하면 된다.
Pop(출력)
Stack* Pop(Stack* node)
{
if (node == NULL) return NULL;
Stack* deleteNode = node;
node = node->NEXT;
free(deleteNode);
return node;
}
※ 현재(Top)의 노드를 할당해제하고 인수로 받은 노드의 다음 노드를 반환한다.
위 과정을 그림으로 풀면 다음과 같다.
※ 제일 마지막에 Push된 데이터가 스택의 Top이 된다.
※ Push : 현재 Top(Stack3)을 인수로 넘겨주면 Push함수에서 노드를 동적할당하고 Stack->NEXT에 인수로 받은 Stack3을 대입해주고 반환해주면, Top은 새로 할당한 노드로 변경이 되고 기존 노드(Stack3)은 새로 할당한 노드의 참조 변수(NEXT)에 대입해주면 된다.
※ Pop : 현재 Top을 인수로 넘겨주면 되고, Pop함수에서 인수로 받은 Top 노드를 할당 해제 해주고, Top노드의 참조 변수(NEXT)를 반환해주면 된다.
풀 소스코드는 다음과 같다.
#include <stdio.h>
#define MAX 10
typedef struct Stack
{
int data;
struct Stack* NEXT;
}Stack;
Stack* Push(Stack* node, int data)
{
Stack* newNode = (Stack*)malloc(sizeof(Stack));
newNode->data = data;
newNode->NEXT = node;
return newNode;
}
Stack* Pop(Stack* node)
{
if (node == NULL)
{
printf("데이터가 없습니다.\n");
return NULL;
}
printf("%d ", node->n);
Stack* deleteNode = node;
node = node->NEXT;
free(deleteNode);
return node;
}
void main()
{
Stack* top = NULL;
for(int i = 0; i < MAX; i++)
top = Push(top, data);
//현재 상태 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9(top)
for(int i = 0; i < MAX; i++)
top = Pop(top);
//결과 : 9 8 7 6 5 4 3 2 1 0
}
반응형
'Stack > Data struct' 카테고리의 다른 글
C 트리 순회(Tree traversal) 구현 (0) | 2021.09.10 |
---|---|
C 이진탐색트리(Binary search tree) 구현 (0) | 2021.09.09 |
C 트리(Tree) 설명 (0) | 2021.09.09 |
C 큐(Queue) 구현 (0) | 2021.09.09 |
C Linked List(연결리스트 구현) (0) | 2021.09.05 |