자료 구조2012. 5. 11. 21:14

스택 주차장 

"가장 먼저 들어간 차가 가장 마지막에 나오는 구조"


FILO(First In, Last Out) or LIFO(Last In, First Out)

요소의 삽입과 삭제가 자료구조의 한쪽 끝에서만 이루어지는 특징을 가진다.


스택은 소프트웨어 분야의 중요한 곳에 많이 사용된다.

자동메모리가 스택을 기반으로 동작하고, 거의 대부분의 네트워크 프로토콜도 스택을 기반하고 있다.


스택의 주요 기능

  • 삽입(Push)
  • 제거(Pop)



배열로 구현한 스택

배열을 이용한 스택은 용량을 조절하기 어렵다는 단점이 있지만, 구현이 간단하다는 장점이 있다.


노드 구조체

typedef int ElementType;


typedef struct tagNode

{

ElementType Data;

}Node;


스택 구조체
typedef struct tagArrayStack
{
int Capacity;    //용량
int Top            //최상위 노드의 위치
Node* Nodes; //노드 배열
}ArrayStack;
Nodes 포인터는 자유저장소에 할당한 배열의 첫 번재 요소를 가리킨다.

Array Stack 소스코드





연결 리스트로 구현한 스택


스택의 용량에 제한이 없다.


노드 구조체

typedef struct tagNode

{

char* Data;

struct tagNode* NextNode;

} Node;

문자열을 처리하는 스택

(char* 형은 포인터이기 때문에 문자열이 저당되어 있는 주소만을 담을 수 있고문자열은 자동메모리가 아닌 자유 저장소에 저장되어야 한다.)


스택 구조체

typedef struct tagLinkedListStack

{

Node* List;

Node* Top;

} LinkedListStack;

List 포인터는 연결 리스트의 헤드를 가리키고, Top 포인터는 연결 리스트의 테일을 가리키게 한다.

Top 포인터를 이용하면 4바이트를 소비하고 연결리스트의 테일을 찾는데 소모되는 시간 비용을 제거할 수 있다.


LinkedListStack 소스코드






Posted by elluma