Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- springdatajpa
- Exception
- AOP
- SpringBoot
- 김영한
- pointcut
- Servlet
- jpa
- JDBC
- spring
- JPQL
- 스프링
- 알고리즘
- Spring Boot
- Greedy
- transaction
- Android
- QueryDSL
- java
- 자바
- 스프링 핵심 기능
- Proxy
- 인프런
- 스프링 핵심 원리
- db
- 그리디
- kotlin
- Thymeleaf
- http
Archives
- Today
- Total
개발자되기 프로젝트
Stack 구현 본문
1. Stack 특징
- Last In Last Out
- 가장 최근의 자료를 찾아오거난 게임에서 히스토리 유지하면서 무를 때 ㅋㅋㅋ
- 함수의 메모리는 호출 순서에 따른! Stack 구조
- jdk : Stack
2. Stack 구현
- 이미 Array를 구현했으니, 구현한 Array를 활용하자.
- top은 size를 의미하며 마지막 index + 1 과 같다.
- pop : top에 있는 data를 꺼내고 array에서 삭제
- peek : top에 있는 data 조회.
public class MyArrayStack {
MyArray arrayStack;
int top;
public MyArrayStack() {
top = 0;
arrayStack = new MyArray();
}
public MyArrayStack(int size){
top = 0;
arrayStack = new MyArray(size);
}
public void push(int data){
if (isFUll()){
throw new OutOfMemoryError("stack is full");
}
arrayStack.addElement(data);
top++;
}
public int pop(){
if (isEmpty() == true){
return MyArray.ERROR_NUM;
}
return arrayStack.removeElement(--top);
}
public int peek(){
if (isEmpty() == true){
return MyArray.ERROR_NUM;
}
return arrayStack.getElement(top-1);
}
public boolean isFUll(){
if (top == arrayStack.getARRAY_SIZE()){
return true;
}
else return false;
}
public boolean isEmpty(){
if (top == 0){
return true;
}
return false;
}
public void printAll(){
arrayStack.printAll();
}
}
3. Test
class MyArrayStackTest {
MyArrayStack arrayStack;
int cnt = 5;
@BeforeEach
void setUp() {
arrayStack = new MyArrayStack();
for (int i = 0; i< cnt; i++){
arrayStack.push(i);
}
}
@AfterEach
void afterTest(){
arrayStack.arrayStack.clear();
}
@Test
void push() {
//given
int pushData = 10;
//when
arrayStack.push(pushData);
//then
assertEquals(arrayStack.top, cnt+1);
assertEquals(arrayStack.peek(), pushData);
assertEquals(arrayStack.pop(), pushData);
}
@Test
void pop() {
//given
//when
arrayStack.pop();
//then
assertEquals(arrayStack.top, cnt - 1);
assertEquals(arrayStack.peek(), 3);
}
@Test
void peek() {
//given
//when
int peek = arrayStack.peek();
//then
assertEquals(peek, 4);
assertEquals(arrayStack.top, cnt);
}
@Test
void isFUll() {
for (int i=cnt; i < arrayStack.arrayStack.getARRAY_SIZE(); i++){
arrayStack.push(i);
}
boolean result = arrayStack.isFUll();
assertTrue(result);
}
@Test
void isNotFUll() {
for (int i=cnt; i < arrayStack.arrayStack.getARRAY_SIZE()-1; i++){
arrayStack.push(i);
}
boolean result = arrayStack.isFUll();
assertFalse(result);
}
}
4. GitHub : 211024 Stack 구현
'Java > 자료구조' 카테고리의 다른 글
Generic Programming (0) | 2021.10.24 |
---|---|
Queue 구현 (0) | 2021.10.24 |
LinkedList 구현 (0) | 2021.10.24 |
Array 구현 (0) | 2021.10.24 |
자료구조-비선형 (0) | 2021.10.24 |
Comments