자료구조

스택

연한그린커리 2020. 1. 2. 11:11

 

선형 자료구조

 

'쟁반 위에 쌓인 접시'

 먼저 쌓아 올려진 것이 먼저 나온다.

 후입선출 Last-In, First-Out

 

 

스택 ADT

 

//스택을 초기화 하는 함수이다.
void StackInit(Stack* pstack);

// 스택 비어있는지 검사 (빈 경우 1 반환, 아닐 시 0반환)
int SIsEmpty(Stack* pstack);

//스택에 데이터를 저장하는 함수
void SPush(Stack* pstack, Data data);


//마지막에 저장된 요소를 삭제하는 함수이다. (삭제된 데이터 값은 반환)
Data Spop(Stack* pstack);


//마지막에 저장된 요소를 반환하는 함수이다.
Data SPeek(Stack* pstack);

 

 

 

 

스택을 구현하는 방법

 

1. 배열 기반으로 구현한다.

2. ㅇ연결 리스트 기반으로 구현한다. (구현한 자료구조를 이용하여 또 다른 자료구조를 이용하는 방법도 존재 따지고 보자면 배열 역시 자료구조의 범주안에 속한다. 리스트를 만들어 놓고 이 리스트를 활용하여 스택을 또 만드는건 아니다. 리스트 구현을 약간 변경하여 스택으로 만드는 것이 옳다.)

 

 

스택의 배열 기반 구현

 

구현 시 주의사항. 

인덱스 0이 바닥이다. - 배열의 길이와 상관없이 언제나 스택의 바닥은 인덱스 0으로 접근할 수 있다.

마지막에 저장된 위치(Top)를 기억해야한다. - 스택의 작동(Push, Pop) 연산의 원리이다.

 

push : Top을 위로  한 칸 올리고, Top이 가리키는 위치에 데이터를 저장

pop : Top이 가리키는 데이터를 반환하고, Top을 아래로 한 칸 내림

 

 

 

 

 

 

 

스택의 연결 리스트 기반 구현

 

스택은 리스트와 유사하다. 삭제 방법에 차이가 날 뿐이다. 

 

 

 

스택활용

계산기 프로그램 연산자 중위 교기법을 후위 표기법으로 변경하는데 사용할 수 있다. 

 스택 구조로 연산자를 쌓아 우선순위가 높은 연산자(마지막에 쌓인 연산자)를 먼저 처리하는 방식이다.