package datastructure.chap05.stack;
// 스택에 쌓을 노드
class StackNode{
private int item; // 스택에 저장될 정수
private StackNode Link; // 다음 노드를 연결할 포인터
public int getItem() {
return item;
}
public void setItem(int item) {
this.item = item;
}
public StackNode getLink() {
return Link;
}
public void setLink(StackNode link) {
Link = link;
}
}
public class Stack {
//스택의 맨 위쪽 노드를 가리킬 포인터
private StackNode top;
public Stack(){
top = new StackNode();
}
//스택이 비어있는지 확인
public boolean isEmpty(){
return top.getLink() == null;
}
// 스택에 자료 삽입
public void push(int item) {
// 새노드 생성
StackNode newNode = new StackNode();
newNode.setItem(item); // 새노드에 데이터 저장
// 새노드는 기존의 top이 기억하고 있는 노드를 연결한다.
newNode.setLink(top.getLink());
top.setLink(newNode);
}
// 스택에서 자료를 제거
public Integer pop(){ //Integet는 null을 저장할수 있는 int라고 생각 다음에 배움
if(isEmpty()) {//스택이 비었으면
System.out.println("stack is empty!");
return null;
} else {
// 데이터 가져오기
int result = top.getLink().getItem();
//top이 제거될 노드의 다음노드를 연결하도록 함.
top.setLink(top.getLink().getLink());
return result;
}
}
// 스택에서 자료를 단순 읽기
public Integer peek(){
if(isEmpty()) {//스택이 비었으면
System.out.println("stack is empty!");
return null;
} else {
// 데이터 가져오기
int result = top.getLink().getItem();
return result;
}
}
}
package datastructure.chap05.stack;
public class Main {
public static void main(String[] args) {
// 스택 생성
Stack stack = new Stack();
//스택에 자료 넣기
for (int i = 0; i <= 5; i++) {
stack.push(i*3);
}
//스택에서 순서대로 자료들을 제거하면서 출력
while(!stack.isEmpty()) {
Integer removed = stack.pop();
System.out.println(removed);
}
stack.peek();
}
}
'알고리즘' 카테고리의 다른 글
java_정렬(버블정렬)_22.06.13(day15) (0) | 2022.06.13 |
---|---|
java_자료구조(QUEUE)_22.06.09(day13) (0) | 2022.06.09 |
java_투_포인터_22.06.08(day12) (0) | 2022.06.08 |
java_알고리즘(구간합)_22.06.02(day11) (0) | 2022.06.03 |
java_자료구조(양방향리스트)_22.06.02(day11) (0) | 2022.06.03 |