순차적 자료구조 - STACK
2021. 6. 28. 11:29ㆍ자료구조 (Data Structure)
1. STACK이란?
- 리스트와 다르게 제한된 접근만 허용. 즉, 삽입, 삭제만 허용하는 선형(linear)자료구조
- LIFO(LAST IN FIRST OUT)의 원칙을 따른다
2. STACK의 연산
- 삽입: push()
- 삭제: pop() - 가장 위에 있는 항목을 삭제
- peak() - 가장 위에 있는 항목을 리턴, 항목을 삭제하는 pop과는 다름
- isEmpty() - 스택이 비어 있다면, True를 반환
java로 구현
Node
public class Node {
//데이터 필드
public String data;
//링크 필드
//참조변수에 저장되는 객체 타입으로 타입을 선언
public Node link;
public Node(String data) {
super();
this.data = data;
}
public Node(String data, Node link) {
//super();
//this.data = data;
this(data);
this.link = link;
}
@Override
public String toString() {
return "Node [data=" + data + ", link=" + link + "]";
}
}
Stack
public class Stack {
private Node top;
public void push(String data) {
Node newNode = new Node(data, top);
top = newNode;
}
public boolean isEmpty() {
return top == null;
}
public String pop() {
if(isEmpty()) {
System.out.println("스택이 비어있어 pop이 불가능~");
return null;
}
Node popNode = top;
//top자리를 물려준다
top = popNode.link;
popNode.link = null;
return popNode.data;
}
//pop에서 삭제만 할 필요 없당~
public String peek() {
if(isEmpty()) {
System.out.println("스택이 비어있어yo");
return null;
}
Node peekNode = top;
return peekNode.data;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("S ( ");
for(Node currNode = top; currNode!=null; currNode = currNode.link) {
sb.append(currNode.data).append(",");
}
if(!isEmpty())sb.setLength(sb.length()-1);
sb.append(" ) ");
return sb.toString();
}
}
3. STACK의 활용 - 괄호 맞추기
-(2+5)*7-((3-1)/2+7) 과 같은 식의 괄호 맞추기
- 왼쪽과 오른쪽이 개수와 쌍이 모두 맞아야 한다.
- 문제: - 입력: 왼, 오 괄호의 문자영
- 출력: 괄호쌍이 맞으면 True, 아니면 False
- 관찰: ------------(-------------)----------------
'자료구조 (Data Structure)' 카테고리의 다른 글
Hash Table (0) | 2021.07.10 |
---|---|
배열(Array) VS. 리스트(List) (0) | 2021.07.08 |
HEAP(힙) (0) | 2021.06.29 |
TREE (트리) (0) | 2021.06.29 |
순차적 자료구조 - QUEUE (0) | 2021.06.28 |