본문 바로가기
CS/DataStructure

[Data Structure] Stack

by NeNemEee 2023. 4. 10.
728x90

특징

  • LIFO (후입선출)
  • activision record 와 stack frame을 갖고 있음
  • activision record : 이전 stack frame의 pointer와 복귀주소

용례

  • 함수의 CallStack
  • 연산자 후위표기법

장점

  • 구조가 단순
  • 데이터 저장 읽기가 쉬움

단점

  • 데이터 최대 개수를 미리 정해야함
  • 저장공간의 낭비가 발생할 수 있음
  • 삽입 삭제가 비효율적
#include<iostream>
#include<string>

using namespace std;

template <typename T>
class Stack{
    private:
        int size;
        T*stackArr;
    public:
        Stack(){
            size = 0;
        }

        ~Stack(){
            if(size!=0){
                delete stackArr;
            }
        }

        int push(T _tmp){

            if(size!=0){

                T*tempArr = new T[++size];

                for(int i=0; i<size-1; i++){
                    tempArr[i] = stackArr[i];
                }
                tempArr[size-1] = _tmp;

                delete[] stackArr;
                stackArr = new T[size];
                for(int i=0; i<size; i++){
                    stackArr[i] = tempArr[i];
                }

                delete[] tempArr;
            }else{
                size++;
                stackArr = new T[1];
                stackArr[0] = _tmp;
            }

            return 0;
        }

        int pop(){

            if(size!=0){
                T*tempArr = new T[--size];

                for(int i=0; i<size; i++){
                    tempArr[i] = stackArr[i];
                }

                delete[] stackArr;
                stackArr = new T[size];
                for(int i=0; i<size; i++){
                    stackArr[i] = tempArr[i];
                }

                delete[] tempArr;

            }else{
                printf("do not\n");
            }
            return 0;
        }

        int empty(){
            if(size==0){
                cout<<"0\n";
                return 0;
            }else{
                cout<<"1\n";
                return 1;
            }
        }

        int show(){

            show(0);
            return 0;
        }

        int show(int _order){

            if(size==0){
                printf("anything\n");
                return 1;
            }

            if(_order == 0){
                for(int i=0; i<size; i++){
                    cout<<stackArr[i]<<endl;
                }
            }else{
                for(int i=size-1; i>=0; i--){
                    cout<<stackArr[i]<<endl;
                }
            }

            return 0;
        }
};

int main(){
    Stack<int> stack;


    stack.empty();
    stack.pop();
    stack.show();
    stack.show(1);


    return 0;
}


728x90

'CS > DataStructure' 카테고리의 다른 글

[Data Structure] Vector 와 List의 차이  (0) 2023.04.10
[Data Structure] List  (0) 2023.04.10
[DataStructure] Stack과 Queue 의 차이  (0) 2023.04.10
[Data Structure] Unordered_Map  (0) 2023.04.10

댓글