728x90
반응형
큐, 스택구조를 프로그래밍 해보았습니다.
큐, 스택이란???
큐(Queue) : FIFO(First In First Out)
▷ 먼저 들어간 데이터가 먼저 빠져나오는 구조입니다.
스택(Stack) : LIFO(Last In First Out)
▷ 마지막에 들어간 데이터가 먼저 빠져나오는 구조입니다.
(메모리 클래스)
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 | class Memory { protected: int *mem; int i; public: Memory() { mem = new int[20]; i = -1; } virtual ~Memory() { delete[] mem; } virtual void pop() = 0; void push() { if (i < 19) { i++; cout << "메모리에 넣을 수를 입력해 주세요 : "; cin >> mem[i]; } else { cout << "더이상 넣을 수 없습니다!\n"; } } }; | cs |
메모리 클래스입니다. mem 의 크기를 동적할당 해줍니다,
그리고 순수가상함수 pop을 자식에게 사용하도록 합니다.
push함수에선 메모리에 데이터를 넣는 작업을 만들도록 하였습니다.
(스택 클래스)
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 | class MyStack : public Memory { int j; public: void pop() { if (i >= 0) { cout << "\n값을 뺐습니다 : "; cout << mem[i] << endl; cout << "\n"; i--; } else { cout << "\n더이상 뺄 수 없습니다!\n"; } } void disp() { if (i == -1) { cout << "\n아무런 값도 없습니다!\n\n"; } for (j = 0; j < i + 1; j++) { if (mem[j] != NULL) { cout << mem[j] << endl; } else break; } } }; | cs |
스택 클래스입니다. 스택의 구조에 따라 마지막에 들어간 데이터가
먼저 나오도록 만들었습니다. pop함수가 사용한 i는 Memory클래스에서 커져서 들어오기때문에 mem[i]는 가장 마지막에 들어온 데이터가 됩니다.
(큐 클래스)
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 | class MyQueue : public Memory { public: int j; virtual void pop() { if (i >= 0) { cout << "\n값을 뺐습니다 : "; cout << mem[0]<< endl; cout << "\n"; for (j = 0; j < i; j++) { mem[j] = mem[j + 1]; } i--; } else { cout << "\n더이상 뺄 수 없습니다!\n\n"; } } void disp() { if (i == -1) { cout << "\n아무런 값도 없습니다!\n\n"; } for (j = 0; j < i + 1; j++) { if (mem[j] != NULL) { cout << mem[j] << endl; } else break; } } }; | cs |
큐 클래스입니다. 큐의 구조에 따라 처음에 들어간 데이터가
먼저 나오도록 만들었습니다. pop함수에서의 mem[0]은 가장 처음에 들어온 데이터가 됩니다. 또한 mem[ j ] = mem[ j + 1 ]에서 데이터들을 반복문을 사용해 한칸씩 당겨오도록 만들었습니다.
(메뉴 클래스 및 메인)
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 | class Menu { MyStack ms; MyQueue mq; public: Memory *p; 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"); p = &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"); p->push(); break; case 2: system("cls"); p->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 m; m.menu(); } | cs |
메뉴클래스입니다 메뉴에서 선택지들을 선택할 수 있게 하였습니다.
실행파일입니다.
반응형
'Programming > C++' 카테고리의 다른 글
(C++)템플릿을 사용한 스택/큐 구조 프로그램 (2) | 2018.03.16 |
---|---|
(C++) String 함수 만들기! (2) | 2018.03.15 |
(C++) 급여관리프로그램을 짜보았습니다. (0) | 2018.03.12 |
(C++)난 private고 넌 외부사람이야! 우린 안돼! 접근지정자에 대해 알아보자! (0) | 2018.03.09 |
(C++) 클래스를 이용하여 성적처리 (4) | 2018.03.08 |