먼저 스택이란?

스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸시(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 (pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 보관한 자료부터 나오게 된다. 이처럼 나중에 넣은 값이 먼저 나오는 것을 LIFO 구조라고 한다. -출처 위키

 

위에 보시면 위키의 스택 정의를 쉽게 설명하자면 최근에 들어온 데이터가 가장 먼저 나가는 방식입니다.

위 그림으로 stack 표현했을때 모습입니다. 

코드로 확인해보겠습니다. 

링크트 리스트나 배열로 하는게 제일 좋지만 저는 그냥 개념만 보여주기위해서 vector를 이용하겠습니다.

메인에서 stack 함수입니다.

int main() {

	stack();
	


	system("pause");
	return 0;
}

 stack 함수를 확인해보겠습니다.

void stack() {
	vector<int> num;
	static int stackData=-1;
	int count;
	while(1){
	cout << "push 1번, pop 2번, 끝내기 아무 숫자 입력";
	cout << endl;
	cin >> count;
	
	if (count == 1) {
		stackData++;
		 num.push_back(stackData);
		 
		
	}
	else if(count ==2) {
		 num.pop_back();
	}
	else {
		break;
	  }
	
	}
	cout << "결과" << endl;
	for (int i = 0; i < num.size(); i++)
		cout << num[i] << endl;

}

cout << "push 1번, pop 2번, 끝내기 아무 숫자 입력" 말그대로 push는 들어올 숫자 pop 빠질 숫자입니다. 

stackData는 push되면 카운트 되듯 올라갈것입니다.

보시면 push 해주면 num에 stackData가 카운트 되며 들어갑니다.

반대로 pop 에서는  stackData의 최근 데이터가 빠져 나가게 될것입니다. 

if (count == 1) {
		stackData++;
		 num.push_back(stackData);
		 
		
	}
	else if(count ==2) {
		 num.pop_back();
	}
	else {

 

+ Recent posts