티스토리 뷰
노드를 관리하는 NodeData 클래스
Stack을 관리하는 Stack 클래스
그리고 string 관련 입력을 stack 객체와 연결시켜주는 main함수로 구성이 됨.
NodeData 클래스를 만드는 이유는?
굳이 이 문제에서는 한번에 Stack안에서 처리해도 상관은 없지만 캡슐화를 위해서 일부러 빼둠.
혹시나 나중에 int형이 아닌 다른 데이터를 처리한다면? Stack을 모조리 바꿔야한다... 하지만 데이터관련 노드를 따로 클래스로 빼두면 NodeData클래스만 수정하여 사용이 가능.
//
// main.cpp
// algorithm
//
// Created by Eon on 12/27/18.
// Copyright © 2018 Eon. All rights reserved.
//
#include <iostream>
#include <cstring>
using namespace std;
class NodeData {
private:
int number; //숫자를 저장하는 변수
NodeData* down; //밑에 노드를 포인팅
public:
NodeData(int num) : number(num), down(NULL) { } //이니셔라이져를 통한 맴버변수 초기화.
void setNumber(int value) {
number = value;
}
void setdown(NodeData* value) {
down = value;
}
int getNumber() {
return number;
}
NodeData* getdown() {
return down;
}
};
class Stack {
private:
NodeData *top;
int size;
public:
Stack() : top(NULL), size(0) { } //이니셔라이져를 통한 맴버변수 초기화.
~Stack() {
if (top) {
NodeData* temp = top;
NodeData* temp2;
while(temp->getdown()) {
temp2 = temp;
temp = temp->getdown();
delete temp2;
}
}
}
void push(int num) {
NodeData* value = new NodeData(num);
if (isEmpty()) {
top = value;
}
else {
value->setdown(top);
top = value;
}
size ++;
}
int pop() {
if (!isEmpty()) {
NodeData* temp = top;
if(top->getdown()) {
top = temp->getdown();
}
else {
top = NULL;
}
int number = temp->getNumber();
delete temp;
size --;
return number;
}
return -1;
}
int getSize() {
return size;
}
int isEmpty() {
if (!top) {
return true;
}
return false;
}
int getTopNumber() {
if (top) {
return top->getNumber();
}
return -1;
}
};
int main(void) {
Stack stack;
int num;
cin >> num;
cin.ignore();
char inp[100];
for (int i=0; i<num; i++) { //loop by first number.
cin.getline(inp, 100, '\n'); //get string from user.
if (const char* first = strtok(inp, " ")) {
if (strcmp(first, "push") == 0) {
if(const char* second = strtok(NULL, " ")) {
int num = atoi(second);
stack.push(num);
}
else {
continue;
}
}
else if (strcmp(first, "pop") == 0) {
cout << stack.pop() << endl;
}
else if (strcmp(first, "size") == 0) {
cout << stack.getSize() << endl;
}
else if (strcmp(first, "empty") == 0) {
if (stack.isEmpty()) {
cout << 1 << endl;
}
else {
cout << 0 << endl;
}
}
else if (strcmp(first, "top") == 0) {
cout << stack.getTopNumber() << endl;
}
else {
continue;
}
}
}
return 0;
}
'알고리즘' 카테고리의 다른 글
OS - Kernel Compile, kernel Message, System Call, Kernel Module (0) | 2019.01.11 |
---|---|
C++ 상속 기본개념 & 문법 (0) | 2019.01.05 |
iOS 가위바위보 어플 (0) | 2018.12.08 |
스위프트(Swift) 기본 문법 (0) | 2018.12.08 |
Android Project - LottoHelper (0) | 2018.12.06 |
- Total
- Today
- Yesterday
- 환경오염
- egpu
- 슈어
- 서버
- 백준
- 산업화
- 코드업
- 자바
- 외장그래픽
- 개발
- C++
- python
- eclipse
- 카카오톡
- 알고리즘
- 코딩
- 맥
- 맥북
- 프로그래밍
- CodeUp
- 우분투
- NAS
- 문제
- Java
- se846
- 이클립스
- 모바일 프로그래밍
- Vega64
- 파이썬
- 아키티오
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |