알고리즘

[자료구조 Stack C++] 구현

TIM_0529 2023. 2. 23. 14:14
반응형
#include <iostream>
#include "Stack_Implementing.h"
using namespace std;

// 값 추가하기
void Stack::Push(int data)
{
    if (isEmpty()) // 데이터 추가가 가능하다면
    {
        *(p_stack + stack_count) = data;
        stack_count++;
    }
    else
    {
        cout << "Stack is full..." << endl << "Use Pop to delete data" << endl;
    }
}

/** 최상단 값을 출력한다. */
void Stack::Top()
{
    if (stack_count == 0) cout << "Stack is empty..." << endl;
    else
        cout<< *(p_stack + stack_count - 1)<<endl;
}

// 모든 값 순서대로 보기
void Stack::Show_Data()
{
    cout << "stack_count = " << stack_count << endl;
    for (int i = 0; i < stack_count; i++)
    {
        cout << "*p_stack " << i << " data = " << p_stack[i] << endl;
    }
}

// 마지막 값 반환
int Stack::peek()
{
    // 사이즈가 다 차지 않았다면
    if (isEmpty()) 
        return *(p_stack + stack_count);
    else
        return 0;
}

// Stack Count 반환
int Stack::Size()
{
    return stack_count;
}

// 설정된 스택 최대 사이즈를 넘는지 stack_counter 로 판단한다.
bool Stack::isEmpty()
{
    if (stack_count >= STACK_SIZE) return false;
    return true;
}

// 사이즈를 하나 줄인다.
void Stack::Pop()
{
    if (stack_count > 0) stack_count--;
}

int main()
{
    Stack stack;
    while (true)
    {
        int choice;
        int data;
        cout << "1. Push data" << endl;
        cout << "2. Pop data" << endl;
        cout << "3. Peek data" << endl;
        cout << "4. Size data" << endl;
        cout << "5. Show all data" << endl;
        cout << "6. EXIT" << endl;
        cin >> choice;
        switch (choice)
        {
            // 추가
        case 1:
            if (!stack.isEmpty())
            {
                cout << "stack is full" << endl;
                break;
            }
            cout << "Data = ";
            cin >> data;
            stack.Push(data);
            break;
            // 삭제
        case 2:
            stack.Pop();
            cout << "Pop stack successfully.." << endl;
            break;
            // 마지막 값 출력
        case 3:
            cout << endl;
            cout << "Last Data = " << stack.peek() << endl;;
            cout << "Peek stack successfully.." << endl;
            break;
            // 크기 출력
        case 4:
            cout << "Stack Size = "<< stack.Size();
            break;
        case 5:
            // 값 모두 출력
            cout << "========================Data========================" << endl;
            stack.Show_Data();
            break;
        case 6:
            // 나가기
            return 0;
            break;
            // 예외 처리
        default:
            cout << "Answer again.." << endl;
            break;
        }
    }

    stack.Show_Data();




    cout << endl;
    cout << endl;
    cout << endl;
}
#pragma once
#include <iostream>

class Stack
{
private:
    //int stack_size;
    int stack_count;
    int* p_stack;
    const int STACK_SIZE = 10;

public:
    // 생성자
    Stack() :stack_count(0) { p_stack = new int[STACK_SIZE]; };
    // 데이터 추가
    void Push(int data);
    // 최상단 값 삭제
    void Pop();
    // 최상단 값 출력
    void Top();
    // 모든 값 보기
    void Show_Data();


    // 마지막 값 반환
    int peek();
    // 크기 반환
    int Size() {return stack_count;}
    // 생성 가능 여부 확인
    bool isEmpty();

    // 소멸자
    ~Stack() { delete[] p_stack; }

};

기본적인 Push 함수와 ,Pop(), Top(), Peek() 함수 그리고 추가적으로 모든 데이터를 출력하는 Peek() 함수를 구현해 봤습니다.

 

 

반응형

'알고리즘' 카테고리의 다른 글

[백준] 2439 - 별 찍기  (0) 2023.01.29
[c++] 선택 정렬 알고리즘  (0) 2021.01.27