Stack의 특징
- 맨 마지막 위치
(top)
에서만 자료를 추가,삭제, 꺼내올 수 있음
( 중간의 자료를 꺼낼 수 없음)
Last In First Out
( 후입선출 ) 구조
- 가장 최근의 자료를 찾아오거나 게임에서 히스토리를 유지하고 이를 무를때 사용할 수 있음
- 함수의 메모리는 호출 순서에 따른 stack 구조
package ch04;
import ch01.MyArray;
public class MyArrayStack {
MyArray arrayStack;
int top;
public MyArrayStack()
{
top = 0;
arrayStack = new MyArray();
}
public MyArrayStack(int size)
{
arrayStack = new MyArray(size);
}
public void push(int data)
{
if(isFull()){
System.out.println("stack is full");
return;
}
arrayStack.addElement(data);
top++;
}
public boolean isFull()
{
if ( top == arrayStack.ARRAY_SIZE){
return true;
}
else return false;
}
public int pop()
{
if (top == 0){
System.out.println("stack is empty");
return MyArray.ERROR_NUM;
}
return arrayStack.removeElement(--top);
}
public int peek()
{
if (top == 0){
System.out.println("stack is empty");
return MyArray.ERROR_NUM;
}
return arrayStack.getElement(top-1);
}
public int getSize()
{
return top;
}
public boolean isFull()
{
if(top == arrayStack.ARRAY_SIZE){
return true;
}
else return false;
}
public boolean isEmpty()
{
if (top == 0){
return true;
}
else return false;
}
public void printAll()
{
arrayStack.printAll();
}
}
Queue의 특징
맨 앞
(front) 에서 자료를 꺼내거나 삭제하고, 맨 뒤
(rear)에서 자료를 추가 함
Fist In First Out
(선입선출) 구조
순차적
으로 입력된 자료를 순서대로 처리하는데 많이 사용 되는 자료구조
- 콜센터에 들어온 문의 전화, 메세지 큐 등에 활용됨
연결 리스트를 활용하여 Queue 구헌하기
package ch04;
import ch03.MyLinkedList;
import ch03.MyListNode;
interface IQueue{
public void enQueue(String data);
public String deQueue();
public void printAll();
}
public class MyListQueue extends MyLinkedList implements IQueue{
MyListNode front;
MyListNode rear;
public MyListQueue()
{
front = null;
rear = null;
}
@Override
public void enQueue(String data)
{
MyListNode newNode;
if(isEmpty())
{
newNode = addElement(data);
front = newNode;
rear = newNode;
}else {
newNode = addElement(data);
rear = newNode;
}
System.out.println(newNode.getData() + " added");
}
@Override
public String deQueue()
{
if(isEmpty()){
System.out.println("Queue is Empty");
return null;
}
String data = front.getData();
front = front.next;
if(front == null) {
rear = null;
}
return data;
}
public void printAll()
{
if(isEmpty()) {
System.out.println("Queue is Empty");
return;
}
MyListNode temp = front;
while(temp != null) {
System.out.print(temp.getData());
temp = temp.next;
}
System.out.println();
}
}