스택 주차장
"가장 먼저 들어간 차가 가장 마지막에 나오는 구조"
FILO(First In, Last Out) or LIFO(Last In, First Out)
요소의 삽입과 삭제가 자료구조의 한쪽 끝에서만 이루어지는 특징을 가진다.
스택은 소프트웨어 분야의 중요한 곳에 많이 사용된다.
자동메모리가 스택을 기반으로 동작하고, 거의 대부분의 네트워크 프로토콜도 스택을 기반하고 있다.
스택의 주요 기능
- 삽입(Push)
- 제거(Pop)
배열로 구현한 스택
배열을 이용한 스택은 용량을 조절하기 어렵다는 단점이 있지만, 구현이 간단하다는 장점이 있다.
노드 구조체
typedef int ElementType;
typedef struct tagNode
{
ElementType Data;
}Node;
연결 리스트로 구현한 스택
스택의 용량에 제한이 없다.
노드 구조체
typedef struct tagNode
{
char* Data;
struct tagNode* NextNode;
} Node;
문자열을 처리하는 스택
(char* 형은 포인터이기 때문에 문자열이 저당되어 있는 주소만을 담을 수 있고, 문자열은 자동메모리가 아닌 자유 저장소에 저장되어야 한다.)
스택 구조체
typedef struct tagLinkedListStack
{
Node* List;
Node* Top;
} LinkedListStack;
List 포인터는 연결 리스트의 헤드를 가리키고, Top 포인터는 연결 리스트의 테일을 가리키게 한다.
Top 포인터를 이용하면 4바이트를 소비하고 연결리스트의 테일을 찾는데 소모되는 시간 비용을 제거할 수 있다.
LinkedListStack 소스코드
'자료 구조' 카테고리의 다른 글
| Queue(큐) : 순환 큐(Circular Queue) (0) | 2012.05.17 |
|---|---|
| Stack : 사칙 연산 계산기 (0) | 2012.05.14 |
| Circular Linked List (환형 연결 리스트) (0) | 2012.05.11 |
| Doubly Linked List (이중 연결 리스트) (0) | 2012.05.11 |
| Linked List (연결 리스트) (0) | 2012.05.11 |