구조체를 이용한 스택의 구현
https://candletheif.tistory.com/10
스택
스택 스택은 데이터를 FILO(First In Last Out) 원칙에 의해 삽입하거나 삭제하는 자료구조를 말합니다. 스택에 데이터가 삽입 되는 것을 push라 부르고, 삭제하는 것을 pop이라 부릅니다. -push(value): 스��
candletheif.tistory.com
지난번엔 일반적인 배열을 이용하여 스택을 구현하였습니다.
하지만 일반적인 배열을 이용하여 구현한 스택은 두 개 이상의 스택을 구현에 적합하지 않습니다.
스택의 가장 윗 단의 위치를 나타내는 변수 top이 하나 밖에 없어 여러 스택에 사용할 수 없기 때문입니다.
그래서 오늘은 구조체를 이용하여 스택 배열과 top을 구조체로 묶어 여러 스택을 구현해보도록 하겠습니다.
구현
#define N 1024
//구조체를 이용하여 스택에 저장 되는 값들의 배열인 stk와 가장 윗단 top을 선언
struct stack {
int stk[N];
int top;
};
//stack이 만들어 지면 사용 될 top을 초기화
void initStack(stack* S) {
S->top = -1;
}
//스택이 비었는지 확인. 각 개별 스택을 구분하기 위해 포인터를 사용한다.
bool isEmpty(stack* S) {
if (S->top < 0)
return true;
else
return false;
}
//스택이 차있는지 확인. 각 개별 스택을 구분하기 위해 포인터를 사용한다.
bool isFull(stack* S) {
if (S->top >= N)
return true;
else
return false;
}
//스택에 v를 push 구조체 stack에 있는 변수인 stk와 top을 사용하기 위해 ->를 사용한다.
void push(stack* S, int v) {
if (isFull(S))
cout << "스택이 꽉 차있습니다.\n";
else
S->stk[++(S->top)] = v;
}
//스택에 저장 된 값을 pop 구조체 stack에 있는 변수인 stk와 top을 사용하기 위해 ->를 사용한다.
int pop(stack* S) {
if (isEmpty(S))
cout << "스택에 값이 없습니다.\n";
else
return S->stk[(S->top)--];
}
//스택의 가장 윗단인 top을 리턴 구조체 stack에 있는 변수인 stk와 top을 사용하기 위해 ->를 사용한다.
int Top(stack* S) {
if (isEmpty(S))
cout << "스택에 값이 없습니다.\n";
else
return S->stk[S->top];
}
int main(){
//stack형 a와 b를 선언 각각의 stack과 top을 갖게 된다.
stack a;
stack b;
//top의 값을 초기화
initStack(&a);
initStack(&b);
//각 스택에 값을 입력한다.
for (int i = 0; i < 6; i++) {
push(&a, i);
push(&b, i * 2);
}
//pop
cout << "pop(a): " << pop(&a) << "\n";
cout << "pop(b): " << pop(&b) << "\n";
cout << "\n";
//pop을 한 후의 top을 확인
cout << "Top(a): " << Top(&a) << "\n";
cout << "Top(b): " << Top(&b) << "\n";
}
결과

구조체를 이용하여 스택 a, b를 선언한후 각각의 제어를 하는 코드입니다.
구조체를 통해 각 top 다르게 설정되어 있어 여러개의 스택을 생성할 수 있습니다.
댓글