스택 구현(설명x)
- 프로그래밍 언어/자바
- 2020. 12. 7. 22:07
반응형
반응형
배열로 스택 만들기 코드
public class StackArr {
private int size;
private int cnt;
private int[] stack;
public StackArr(int size) {
this.size = size;
stack = new int[this.size + 100];
}
public void push(int data) {
for(int i = cnt; i >0;i--) {
int temp = stack[i];
stack[i] = stack[i-1];
stack[i-1] = temp;
}
stack[0] = data;
cnt = cnt + 1;
}
public int pop() {
if (cnt <= 0) {
throw new IllegalArgumentException("스택이 비어져 있습니다.");
}
int value = stack[0];
for (int i = 0; i < cnt; i++) {
stack[i] = stack[i + 1];
}
cnt = cnt - 1;
return value;
}
}
배열로 스택 만들기 테스트 코드:
@Test
void test() {
StackArr stackArr = new StackArr(10);
stackArr.push(10);
stackArr.push(10);
stackArr.push(3);
stackArr.push(5);
assertEquals(stackArr.pop(),5);
assertEquals(stackArr.pop(),3);
assertEquals(stackArr.pop(),10);
assertEquals(stackArr.pop(),10);
assertThrows(IllegalArgumentException.class,()->stackArr.pop());
}
링크드 리스트로 스택 코드 :
public class StackLinked {
private LinkedList linked;
public StackLinked() {
linked = new LinkedList();
}
public void push(int data) {
linked.addFirst(data);
}
public int pop() {
return linked.removeFirst();
}
}
링크드 리스트 코드는 다음 링크에서 확인 가능
링크드 리스트 스택 테스트 코드
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class StackLinkedTest {
StackLinked stack;
@BeforeEach
void initial() {
stack = new StackLinked();
}
@Test
void push() {
stack.push(3);
stack.push(5);
stack.push(10);
stack.push(9);
stack.push(3);
assertArrayEquals(stack.test(),new int[]{3,9,10,5,3});
}
@Test
void pop() {
stack.push(3);
stack.push(5);
stack.push(10);
stack.push(9);
stack.push(3);
assertEquals(stack.pop(),3);
assertEquals(stack.pop(),9);
assertEquals(stack.pop(),10);
assertEquals(stack.pop(),5);
assertEquals(stack.pop(),3);
assertThrows(IllegalArgumentException.class,() -> stack.pop());
}
}
test배열 코드는 push된 값들을 배열로 만드는 코드입니다.
반응형
'프로그래밍 언어 > 자바' 카테고리의 다른 글
클래스 (0) | 2020.12.15 |
---|---|
큐 구현(설명 x) (0) | 2020.12.08 |
Live-Study 대시 보드 만들기. (0) | 2020.12.06 |
Junit5 (0) | 2020.12.04 |
반복문과 조건문 (0) | 2020.11.29 |