728x90
반응형
템플릿(제네릭)을 이용한 큐 스택 구조 표현입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | #include<iostream> #include<string> using namespace std; template<typename T> class Memory { protected: T *mem; int i; public: Memory() { mem = new T[20]; i = -1; } ~Memory() { delete[] mem; } virtual void pop() = 0; void push() { if (i < 19) { i++; cout << "메모리에 넣을 수를 입력해 주세요 : "; cin >> mem[i]; } else { cout << "더이상 넣을 수 없습니다!\n"; } } }; template<typename T> class MyStack : public Memory<T> { int j; public: void pop() { if (Memory<T>::i >= 0) { cout << "\n값을 뺐습니다 : "; cout << Memory<T>::mem[Memory<T>::i] << endl; cout << "\n"; Memory<T>::i--; } else { cout << "\n더이상 뺄 수 없습니다!\n"; } } void disp() { if (Memory<T>::i == -1) { cout << "\n아무런 값도 없습니다!\n\n"; } for (j = 0; j < Memory<T>::i + 1; j++) { //if (Memory<T>::mem[j] != NULL) { cout << Memory<T>::mem[j] << endl; //} //else // break; } } }; template<typename T> class MyQueue : public Memory<T> { public: int j; virtual void pop() { if (Memory<T>::i >= 0) { cout << "\n값을 뺐습니다 : "; cout << Memory<T>::mem[0] << endl; cout << "\n"; for (j = 0; j < Memory<T>::i; j++) { Memory<T>::mem[j] = Memory<T>::mem[j + 1]; } Memory<T>::i--; } else { cout << "\n더이상 뺄 수 없습니다!\n\n"; } } void disp() { if (Memory<T>::i == -1) { cout << "\n아무런 값도 없습니다!\n\n"; } for (j = 0; j < Memory<T>::i + 1; j++) { //if (Memory<T>::mem[j] != NULL) { cout << Memory<T>::mem[j] << endl; // } // else // break; } } }; template<typename T> class Menu { MyStack<string> ms; MyQueue<string> mq; public: Memory<string> *p; Memory<string> *pi; void menu() { int sel = 0; while (sel != 3) { int sel1 = 0; cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout << " ┃ ◆큐 스택 메뉴입니다◆ ┃\n"; cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout << " ┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓\n"; cout << " ┃ 1. Queue ┃ 2. Stack ┃ 3. Exit ┃\n"; cout << " ┗━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛\n"; cout << " ▶무엇을 하시겠습니까? >> "; cin >> sel; switch (sel) { case 1: system("cls"); pi = &mq; while (sel1 != 4) { cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout << " ┃ ◆ 큐 메뉴입니다◆ ┃\n"; cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout << " ┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓\n"; cout << " ┃ 1. Push ┃ 2. Pop ┃ 3. Disp ┃ 4. Priv ┃\n"; cout << " ┗━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛\n"; cout << " ▶무엇을 하시겠습니까? >> "; cin >> sel1; switch (sel1) { case 1: system("cls"); pi->push(); break; case 2: system("cls"); pi->pop(); break; case 3: system("cls"); mq.disp(); break; case 4: system("cls"); cout << "\n이전메뉴로 돌아갑니다.\n" << endl; break; default: system("cls"); cout << "\n잘못된 입력입니다\n" << endl; } } break; case 2: system("cls"); p = &ms; while (sel1 != 4) { cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout << " ┃ ◆ 스택 메뉴입니다◆ ┃\n"; cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; cout << " ┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓\n"; cout << " ┃ 1. Push ┃ 2. Pop ┃ 3. Disp ┃ 4. Priv ┃\n"; cout << " ┗━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛\n"; cout << " ▶무엇을 하시겠습니까? >> "; cin >> sel1; switch (sel1) { case 1: system("cls"); p->push(); break; case 2: system("cls"); p->pop(); break; case 3: system("cls"); ms.disp(); break; case 4: system("cls"); cout << "\n이전메뉴로 돌아갑니다.\n" << endl; break; default: system("cls"); cout << "\n잘못된 입력입니다\n" << endl; } }break; case 3: cout << "\n프로그램을 종료합니다.\n" << endl; break; default: system("cls"); cout << "\n잘못된 입력입니다\n" << endl; } } } }; void main() { Menu<void> m; m.menu(); } | cs |
실행파일입니다!
반응형
'Programming > C++' 카테고리의 다른 글
(C++) String 함수 만들기! (2) | 2018.03.15 |
---|---|
(C++) 큐, 스택이 뭔지 아시나요?? FIFO? FILO? (0) | 2018.03.14 |
(C++) 급여관리프로그램을 짜보았습니다. (0) | 2018.03.12 |
(C++)난 private고 넌 외부사람이야! 우린 안돼! 접근지정자에 대해 알아보자! (0) | 2018.03.09 |
(C++) 클래스를 이용하여 성적처리 (4) | 2018.03.08 |