Stack [Linked_list 로 구현 하기]
Header.h
#include<cstdio>
#include<cstdlib>
struct Node {
int data;
Node* next = nullptr;
};
// list에서 필요한 노드 구조체 활용.
class Stack {
// Stack 은 기본적으로 Push , pop , isEmpty 로 구성 된다
// 나는 Linked_list 를 이용하여 stack 을 구현했기때문에 isFull 동작은 할수없다고 판단하여 미구현.
// top 는 스택에서 현재 위치를 나타낸다.
// push 는 값을 입력할때마다 top 의 위치를 증가시킨다
// Stackt 은 FILO 다. First In Last Out
private:
int top = -1;
Node* first = new Node();
Node* getNode(int index) {
Node* node = first;
for (int i = 0; i <= index; i++) {
node = node->next;
}
return node;
}
public:
// push 데이터값을 입력하는 동작
// push 를 할때 top의 값은 증가한다.
Node* push(int data) {
Node* node = new Node();
node->data = data;
Node* prev = getNode(top);
Node* curr = prev->next;
node->next = curr;
prev->next = node;
top++;
return node;
}
int pop() {
// pop 동작시 값을 가져온다.
// top의 값은 감소 한다.
if (top < 0) {
return isEmpty();
}
else {
Node* prev = getNode(top - 1);
Node* del = prev->next;
Node* next = del->next;
int popData = del->data;
prev->next = next;
top--;
return popData;
}
}
bool isEmpty() {
// top의 위치로 값을 판단하며 top의 값이 0보다 작다면 스택은 비어있음을 뜻한다.
// 조건에 충족하면 stack is Empty 를 출력 아니면 동작하지않는다.
if (top == -1) {
printf("Stack is Empty!\n");
return true;
}
else {
return false;
}
}
~Stack() {
int listTop = top;
}
};
Source.cpp
#include"Header.h"
int main() {
int stackData;
Stack* stack1 = new Stack;
stack1->push(10);
stackData=stack1->pop();
printf("[%d] ", stackData);
stackData = stack1->pop();
fgetc(stdin);
return 0;
}
Stack 을 클래스로 구현 진행하였다.
클래스 공부를 진행하면서 생성사 소멸자 개념이 생소하다.
연습을하며 더 실력 을 키워야할것이다.
자료구조 기초 (0) | 2017.12.06 |
---|---|
Binary Search Tree 구현. 자료구조 공부 (31) | 2017.06.08 |
Class 사용 Queue 구현 (0) | 2017.05.25 |
Insertion_sort_ 구현 (0) | 2017.05.25 |
Linked_list [data_struct] (31) | 2017.05.22 |