본문 바로가기
자료구조

[자료구조] Stack 개념 정리

by 송파감자 2023. 3. 18.

어제 학원에서 스택을 배웠다. 

스택이란 자료구조가 따로 있는  아니고, 배열이나 링크드리스트로 스택처럼 구현하는 거다.

 

  • 스택은 Last In First Out
  • 나중에 들어간게 먼저 나오는 애인데,
  • 예를 들자면 초밥집 접시 쌓을 때 순차적으로 쌓쥬? 마지막으로 쌓은 접시를 가장 먼저 빼는 그 개념  
  • 배열은 할당된 메모리에 데이터를 저장하기 때문에 어디에 저장할지 기억하는 변수가 필요함 (Top = 0)
  • 왜냐? 몇 번째 방에 저장할 지를 알아야 하니까
  • 배열의 최대 크기== TOP의 크기라면 그게 오버플로우임
#include <iostream>
using namespace std;

class Stack {
public:
	// 집어 넣는 함수
	void Push(int num) 
	{
		ary[top++] = num;
	}
    
	// 빼는 함수
	void Pop()
	{
        // 오버플로우 안되게 top이 0보다 클 때만 top을 1씩 줄인다
		if(top > 0)
			top--; 
	}
    
	// top 크기만큼 배열 출력 
	void Print()
	{
		for (int i = 0; i < top; i++)
		{
			cout << ary[i] << endl;
		}
	}
    
private:	
	int top = 0;     // 몇번째 저장할 차례인지 알려주는 꼭대기!	
	int ary[10];     // 방 10개 짜리 배열
	int length = 10; // 배열의 길이
};

int main()
{
	Stack stack1;    // stack1이라는 객체 생성
	stack1.Push(2);  // 2를 푸쉬해서 배열 0번방에 2 넣어줌
	stack1.Push(30); // 30푸쉬해서 배열 1번방에 30 넣어줌
	stack1.Pop();    // 팝(빼줘서)해서 top크기가 0이 되었다
	stack1.Print();  // 출력하면!!! 배열0번 방 값만 나오게 됨!

	return 0;
}

위 내용대로 출력하면 2가 나오쥬?

 

위 내용을 초밥 구조체 배열로 적용해서 수정해보면 아래와 같다.

#include <iostream>
using namespace std;

struct SushiSt{
	string name = "초밥이름";
	int price = 1004;
};

class Sushi {
	enum{ MAX_ARRAY_SIZE = 10 };
public:
	Sushi() 
	: m_top(0)
	{
		
	}
	void Push(string name, int price)
	{
		m_sushiAry[m_top].name = name;
		m_sushiAry[m_top++].price = price;
	}
	void Pop()
	{
		if (m_top > 0)
			m_top--;
	}
	void Print()
	{
		for (int i = 0; i < m_top; i++)
		{
			cout << i+1 << ". " << m_sushiAry[i].name << " " << m_sushiAry[i].price << endl;
		}
	}

private:
	SushiSt m_sushiAry[MAX_ARRAY_SIZE]; // 초기화 안 해서 맨첨에 쓰레기값 들어가있음
	int m_top; 
};
int main()
{
	Sushi sushi1;

	sushi1.Push("계란", 1500);
	sushi1.Push("연어", 2000);
	sushi1.Push("참치", 3000);
	sushi1.Pop();
	sushi1.Print();

	return 0;
}

세번Push, 한번Pop해서 top이 1이 되었고, 1번방까지 출력된거쥬?

 

'자료구조' 카테고리의 다른 글

[자료구조] DFS와 BFS  (0) 2024.08.02
[자료구조] Double Linked List (C++)  (1) 2023.10.23
[자료구조] Single Linked List (C++)  (0) 2023.10.15
[자료구조] Stack 구현 (C++)  (3) 2023.03.19