728x90
반응형
stack이란...
한쪽으로만 자료를 넣고 빼는 구조
LIFO (Last In First Out) 라고 한다.
제일 처음 들어간게 마지막에 나온다.
그림판으로 그려본 스택....
우선 StackArr 클래스를 만들자.
StackArr.h
#pragma once
#include<iostream>
using namespace std;
#define STACK_SIZE 5
class StackArr
{
private:
int _data[STACK_SIZE];
int _top; // 몇 개가 쌓였는지 체크할 변수
public:
StackArr();
~StackArr();
void push(int num); // 요소 추가 함수
void pop(); // 요소 제거 함수
void print(); // 내용물 확인하는 함수
void isFull(); // 다 찼는지 체크
void isEmpty(); // 비어있는지 체크
};
StackArr.cpp
#include "StackArr.h"
StackArr::StackArr() : _top(-1) // 처음엔 값이 없으므로 -1로 초기화 해준다
{}
StackArr::~StackArr() {}
void StackArr::push(int num)
{
// 들어가있는 요소가 사이즈보다 크면 넘어가기
if (_top >= STACK_SIZE - 1) {
cout << "더이상 못들어가..." << endl;
return;
}
_data[++_top] = num;
this->print();
}
void StackArr::pop()
{
if (_top == -1) {
cout << "아무것도 없어..." << endl;
return;
}
/*return */_data[_top--];
this->print();
}
void StackArr::print()
{
for (int i = 0; i <= _top; i++) {
cout << _data[i] << " ";
}
cout << endl;
}
void StackArr::isFull()
{
// 배열의 인덱스는 0부터 시작이니까 하나 빼주기...
if (_top == STACK_SIZE - 1) {
cout << "꽉참!!" << endl;
}
else {
cout << "아직 다 안찼어..." << endl;
}
}
void StackArr::isEmpty()
{
if (_top == -1) {
cout << "비어있음!!" << endl;
}
else {
cout << "아직 남아있어..." << endl;
}
}
Stack 처럼 구현하기 위해 요소를 넣으면 앞에서 부터 채워지고 요소를 빼면 뒤에서 부터 나간다.
main.cpp
#include <iostream>
#include "StackArr.h"
using namespace std;
void main() {
StackArr sa;
sa.isEmpty();
for (int i = 1; i < 7; i++) {
// 요소 추가
sa.push(i);
}
sa.isFull();
sa.isEmpty();
for (int i = 0; i < 6; i++) {
// 요소 제거
sa.pop();
}
sa.isFull();
sa.isEmpty();
}
실행 화면
stack구조 배열 구현 완료... 이게 맞나?
728x90
반응형
'C++' 카테고리의 다른 글
C++ Bubble sort (0) | 2021.12.24 |
---|---|
C++ (STL) Vector 정리 (0) | 2021.12.22 |
C++ 피보나치 수열 구현하기 (1) | 2021.12.21 |
C++ malloc/free 와 new/delete의 차이 (0) | 2021.12.20 |