※ 순차 자료구조를 이용해 구현한 스택과 차이점
배열을 사용하여 구현하기는 쉽지만 물리적 크기가 고정되어 있는 배열을 사용하기 때문에 스택의 크기를 변경하기 어렵고
물리적인 공간 낭비가 생길 수 있다. 이러한 문제를 연결 자료구조를 이용함으로써 해결할 수 있다.
※ 연결 자료구조를 통한 구현
- 스택 초기 상태(공백 스택)는 참조변수 top을 null로 설정.
- 스택이 push되면 새로 push된 노드는 이전 노드를 가르키고 top은 새로 들어온 노드를 가르킨다.
※ 연결 자료구조를 통한 구현 소스
Interface Stack
interface Stack{
boolean isEmpty(); //스택이 공백스택인지 확인하는 함수
void push(char item); //문자를 push하는 함수
char pop(); //pop 하는 함수(top에 있는 원소를 삭제하고 반환하는 연산)
void delete(); //top에있는 원소를 삭제한느 연산
char peek(); //top에 있는 원소를 반환하는 연산
}
StackNode
public class StackNode {
public StackNode link;
private char data;
public StackNode(char item) {
this.data = item;
this.link =null;
}
public char getData(){
return this.data;
}
}
LinkedStack
public class LinkedStack implements Stack {
private StackNode top;
public LinkedStack() {
this.top =null;
}
@Override
public boolean isEmpty() {
if(top==null){
return true;
}else{
return false;
}
}
@Override
public void push(char item) {
StackNode node = new StackNode(item);
if(isEmpty()){
top = node;
}else{
node.link= top;
top= node;
}
}
@Override
public char pop() {
if(isEmpty()){
System.out.println("stack is empty");
return 0;
}else{
StackNode node = top;
top = node.link;
return node.getData();
}
}
@Override
public void delete() {
if(isEmpty()){
System.out.println("stack is empty");
}else{
StackNode node = top;
top = node.link;
}
}
@Override
public char peek() {
if(isEmpty()){
System.out.println("stack is empty");
return 0;
}else{
return top.getData();
}
}
public void printStack(){
if(isEmpty()){
System.out.println("stack is empty");
}else{
StackNode node = top;
int idx =1;
while(node.link != null){
System.out.print("index : " + idx + " value : " + node.getData() + " / ");
node = node.link;
idx++;
}
System.out.println("index : " + idx + " value : " + node.getData());
}
}
}
Main
public class Main {
public static void main(String[] args) {
char deletedItem;
LinkedStack stack = new LinkedStack();
stack.push('A');
stack.printStack();
stack.push('B');
stack.printStack();
stack.push('C');
stack.printStack();
deletedItem = stack.pop();
System.out.println("deleteItem : "+ deletedItem);
System.out.println("peek top value : " + stack.peek());
}
}
'플밍 is 뭔들 > 자료구조' 카테고리의 다른 글
04-1 큐(Queue) (0) | 2016.11.25 |
---|---|
03-4 스택의 응용 (0) | 2016.11.25 |
03-2 스택의 구현(순차 자료구조) (0) | 2016.11.25 |
03-1 스택 (0) | 2016.11.25 |
02-4 이중 연결 리스트 (0) | 2016.11.25 |