본문 바로가기
카테고리 없음

스택 - 구조체를 이용하여 여러개의 스택 구현하기

by 양초털이범 2020. 7. 21.

구조체를 이용한 스택의 구현


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 다르게 설정되어 있어 여러개의 스택을 생성할 수 있습니다. 

댓글