티스토리 뷰

LANGUAGE/C++

[C++] STACK / QUEUE

진심스테이크 2018. 3. 14. 13:52

 

stack

- FILO : First In Last Out

- 처음에 넣는 값이 제일 나중에 나온다

 

queue

- FIFO : First In First Out

- 처음에 넣는 값이 제일 처음에 나온다

 

 

          

                          

 

                                Stack                                                                  Queue

 

 

Memory

#include "stdafx.h"
#include <iostream>
using namespace std;

class Memory {
protected:
    int *m;
public:
    int count = 0;
    Memory() {
        m = new int[20];
    }

    virtual ~Memory() { //생성자 함수와 소멸자 함수는 세트
        delete[] m;
    }

    void push(int i) { //stack과 queue의 공통적을 데이터를 넣는 일을 하는 함수 
        if (full()) {
            m[count++] = i;
        }
    }

    virtual int pop() = 0; //순수 가상 함수
    virtual bool full() = 0;
    virtual bool empty() = 0;

};
 

 

MyStack

class MyStack : virtual public Memory { //stack
public:
    void push(int i) {
        Memory::m[count++] = i;
    }

    int pop() {
        if (empty()) {
            return Memory::m[--count];
        }
        else {
            return -1;
        }
    }

    bool full() { //지정해준 데이터 용량이 다 차면 예외처리
        if (count == 20) {
            cout << "FULL" << endl;
            return false;
        }
        else
            return true;
    }

    bool empty() { //삭제할 데이터가 업으면 예외처리
        if (count == 0) {
            cout << "EMPTY" << endl;
            count = 0;
            return false;
        }
        else
            return true;
    }
};

 

 

MyQueue

class MyQueue : virtual public Memory { //queue
public:
    int front = 0;
    void push(int i) {
        Memory::m[count] = i;
    }

    int pop() {
        if (empty()) {
            return Memory::m[front];
        }
        else {
            return -1;
        }
    }

    bool full() {
        if (count == 20 && front == 0) {
            cout << "FULL" << endl;
            return false;
        }
        else
            return true;
    }

    bool empty() {
        if (count == front) {
            cout << "EMPTY" << endl;
            return 
            count = front = 0;
            return false;
        }
        else
            return true;
    }

}; 

 

 

Main

void main() {
    Memory *s;
    Memory *q;

    MyStack ms;
    MyQueue mq;

    int choose = 0;
    cout << "1.Stack  2.Queue 3.Exit" << endl;
    cout << "선택 : ";
    cin >> choose;
    switch (choose) {
        while (true) {
    case 1: {
        s = &ms;
        int sc = 0;
        cout << "1.Push  2.Pop" << endl;
        cout << "선택 : ";
        cin >> sc;
        switch (sc) {
            while (true) {
        case 1: { //하나씩 입력
            int i;
            cout << "입력 : ";
            cin >> i;
            s->push(i);
        }break;
        case 2: { //하나씩 삭제
            s->pop();
        }break;
            }break;
        }
    }

    case 2: {
        q = &mq;
        int qc = 0;
        cout << "1.Push  2.Pop" << endl;
        cout << "선택 : ";
        cin >> qc;
        switch (qc) {
            while (true) {
        case 1: { //하나씩 입력
            int i;
            cout << "입력 : ";
            cin >> i;
            q->push(i);
        }break;
        case 2: { //하나씩 삭제
            q->pop();
        }break;
            }break;
        }
    }
        }
    }
}

 

 

 

 

 

'LANGUAGE > C++' 카테고리의 다른 글

[C++] OPERATOR FUNCTION - 연산자 함수  (0) 2018.03.14
[C++] FRIEND  (0) 2018.03.14
[C++] VIRTUAL FUNCTION - 가상 함수  (0) 2018.03.13
[C++] DYNAMIC BINDING - 동적 바인딩  (0) 2018.03.13
[C++] ABSTRACT CLASS - 추상 클래스  (0) 2018.03.13
댓글