자바로 배우는 쉬운 자료구조 chap7
//
스택(stack)
후입 선출(LIFO : Last In First Out) - 마지막에 삽입된 자료가 가장 먼저 삭제됨.
top이 가리키고 있는 자료의 위에 새로운 자료가 쌓임 -> top 올라감
삭제할 때는 top이 가리키고 있는 스택의 마지막 자료만 삭제.
top은 0 ~ n-1까지의 인덱스를 저장하므로, 스택이 초기상태(공백 상태)일 때는 -1를 저장함
push : top을 통한 삽입 연산
pop : top을 통한 삭제 연산
package Stack;
public interface Stack {
boolean isEmpty();
void push(char item);
char pop();
void delete();
char peek();
}
package Stack;
public class ArrayStack implements Stack {
private int top;
private int stackSize;
private char itemArray[];
public ArrayStack(int stackSize) {
top = -1;
this.stackSize = stackSize;
itemArray = new char[this.stackSize];
}
//스택이 공백상태 일 때
public boolean isEmpty() {
// TODO Auto-generated method stub
return (top == -1);
}
//스택이 가득 찼을 때
public boolean isFull() {
// TODO Auto-generated method stub
return (top == this.stackSize-1);
}
//스택에 데이터 삽입
public void push(char item) {
// TODO Auto-generated method stub
if(isFull()){
System.out.println("Stack is full!!");
}
else{
itemArray[++top] = item;
System.out.println("Insert item : " + item);
}
}
//스택에서 삭제할 데이터 반환한 뒤 top--
public char pop() {
// TODO Auto-generated method stub
if(isEmpty()){
System.out.println("Stack is empty!!");
return 0;
}
else{
return itemArray[top--];
}
}
public void delete() {
// TODO Auto-generated method stub
if(isEmpty()){
System.out.println("Stack is empty!!");
}
else{
top--;
}
}
public char peek() {
// TODO Auto-generated method stub
if(isEmpty()){
System.out.println("Stack is empty!!");
return 0;
}
else{
return itemArray[top];
}
}
//출력
public void printStack(){
if(isEmpty()){
System.out.println("Stack is empty!!");
}
else{
System.out.printf("Array Stack>> ");
for (int i = 0; i <= top; i++){
System.out.printf("%c", itemArray[i]);
}
System.out.println();
}
System.out.println();
}
}
package Stack;
public class StackMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
int stackSize = 5;
char deleteItem;
ArrayStack arr = new ArrayStack(stackSize);
arr.push('A');
arr.printStack();
arr.push('B');
arr.printStack();
arr.push('C');
arr.printStack();
deleteItem = arr.pop();
System.out.println("deleted item : " +deleteItem);
arr.printStack();
}
}
스택의 LIFO 성질을 이용하여 역순 문자열 간단히 만들 수 있음.
자바로 배우는 쉬운 자료 구조 chap 8
//
큐(Queue)
FIFO(First In First Out, 선입선출)
front : 첫 번째 원소 - 삭제 연산 수행
rear : 마지막 원소 - 삽입 연산 수행
공백 큐 일 때 front = rear, 초기 상태의 공백 큐는 front = rear = -1
데이터 삽입되면 rear 오른쪽으로 이동, 데이터 삭제되면 front 오른쪽으로 이동
package Queue;
public interface Queue {
boolean isEmpty();
//원소 삽입
void enQueue(char item);
//원소 삭제
char deQueue();
void delete();
char peek();
}
package Queue;
public class ArrayQueue {
private int front;
private int rear;
private int queueSize;
private char[] itemArray;
public ArrayQueue(int queueSize) {
front = -1;
rear = -1;
this.queueSize = queueSize;
itemArray = new char[this.queueSize];
}
public boolean isEmpty(){
return rear == front;
}
public boolean isFull(){
return rear == this.queueSize -1;
}
//삽입
public void enQueue(char item){
if(isFull()){
System.out.println("Array Queue is full!!");
}
else{
itemArray[++rear] = item;
System.out.println("Inserted Item : "+item);
}
}
//삭제
public char deQueue(){
if(isEmpty()){
System.out.println("Array Queue is empty!!");
return 0;
}
else{
return itemArray[++front];
}
}
public void delete(){
if(isEmpty()){
System.out.println("Array Queue is empty!!");
}
else{
++front;
}
}
public char peek(){
if(isEmpty()){
System.out.println("Array Queue is empty!!");
return 0;
}
else{
return itemArray[front+1];
}
}
public void printQueue(){
if(isEmpty()){
System.out.println("Array Queue is empty!!");
}
else{
System.out.println("Array Queue >> ");
for(int i = front+1; i <= rear; i++){
System.out.printf("%c ", itemArray[i]);
}
System.out.println();
}
System.out.println();
}
}
package Queue;
public class QueueMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
int queueSize = 3;
char deletedItem;
ArrayQueue arr = new ArrayQueue(queueSize);
arr.enQueue('A');
arr.printQueue();
arr.enQueue('B');
arr.printQueue();
deletedItem = arr.deQueue();
if(deletedItem != 0){
System.out.println("deleted Item :" + deletedItem);
}
arr.printQueue();
arr.enQueue('C');
arr.printQueue();
deletedItem = arr.deQueue();
if(deletedItem != 0){
System.out.println("deleted Item :" + deletedItem);
}
arr.printQueue();
arr.enQueue('C');
arr.printQueue();
}
}
'Computer Science > Java' 카테고리의 다른 글
[JAVA] BFS - 너비 우선 탐색 (0) | 2018.04.14 |
---|---|
[JAVA] 연결 리스트(Linked List) (0) | 2018.04.13 |
[JAVA] DFS - 깊이 우선 탐색 (0) | 2018.04.13 |
[JAVA] 인접행렬과 인접리스트 (0) | 2018.04.12 |
[JAVA] BufferedReader 사용하기 (0) | 2018.04.12 |