한 번에 끝내는 Java/Spring 웹 개발 마스터
- 자료구조
- 슬슬 대학생때 가장 이해하기 어려웠던 부분에 대해서 배우기 시작하고 있다. 자료구조에 대한 부분이다.
package ch03;
public class MyLinkedList {
private MyListNode head;
int count;
public MyLinkedList() {
head = null;
count = 0;
}
public MyListNode addElement(String data) {
MyListNode newNode;
if (head == null) { // 맨 처음일때
newNode = new MyListNode(data);
head = newNode;
} else {
newNode = new MyListNode(data);
MyListNode temp = head;
while (temp.next != null) // 맨 뒤로 가서
temp = temp.next;
temp.next = newNode;
}
count++;
return newNode;
}
public MyListNode insertElement(int position, String data) {
int i;
MyListNode tempNode = head;
MyListNode newNode = new MyListNode(data);
if (position < 0 || position > count) {
System.out.println("추가 할 위치 오류 입니다. 현재 리스트의 개수는 " + count + "개 입니다.");
return null;
}
if (position == 0) { // 맨 앞으로 들어가는 경우
newNode.next = head;
head = newNode;
} else {
MyListNode preNode = null;
for (i = 0; i < position; i++) {
preNode = tempNode;
tempNode = tempNode.next;
}
newNode.next = preNode.next;
preNode.next = newNode;
}
count++;
return newNode;
}
public MyListNode removeElement(int position) {
int i;
MyListNode tempNode = head;
if (position >= count) {
System.out.println("삭제 할 위치 오류입니다. 현재 리스트의 개수는 " + count + "개 입니다.");
return null;
}
if (position == 0) { // 맨 앞을 삭제하는
head = tempNode.next;
} else {
MyListNode preNode = null;
for (i = 0; i < position; i++) {
preNode = tempNode;
tempNode = tempNode.next;
}
preNode.next = tempNode.next;
}
count--;
System.out.println(position + "번째 항목 삭제되었습니다.");
return tempNode;
}
public String getElement(int position) {
int i;
MyListNode tempNode = head;
if (position >= count) {
System.out.println("검색 위치 오류 입니다. 현재 리스트의 개수는 " + count + "개 입니다.");
return new String("error");
}
if (position == 0) { // 맨 인 경우
return head.getData();
}
for (i = 0; i < position; i++) {
tempNode = tempNode.next;
}
return tempNode.getData();
}
public MyListNode getNode(int position) {
int i;
MyListNode tempNode = head;
if (position >= count) {
System.out.println("검색 위치 오류 입니다. 현재 리스트의 개수는 " + count + "개 입니다.");
return null;
}
if (position == 0) { // 맨 인 경우
return head;
}
for (i = 0; i < position; i++) {
tempNode = tempNode.next;
}
return tempNode;
}
public void removeAll() {
head = null;
count = 0;
}
public int getSize() {
return count;
}
public void printAll() {
if (count == 0) {
System.out.println("출력할 내용이 없습니다.");
return;
}
MyListNode temp = head;
while (temp != null) {
System.out.print(temp.getData());
temp = temp.next;
if (temp != null) {
System.out.print("->");
}
}
System.out.println("");
}
public boolean isEmpty() {
if (head == null)
return true;
else
return false;
}
}
LinkedList에 대한 부분이다.
package ch04;
import ch02.MyArray;
public class MyArrayStack {
MyArray arrayStack;
int top;
public MyArrayStack() {
top = 0;
arrayStack = new MyArray();
}
public MyArrayStack(int size) {
top = 0;
arrayStack = new MyArray(size);
}
public void push(int data) {
if (isFull()) {
System.out.println("stack if Full");
return;
}
arrayStack.addElement(data);
top++;
}
public int pop() {
if (isEmpty()) {
System.out.println("stack if Empty");
return MyArray.ERROR_NUM;
}
return arrayStack.removeElement(--top);
}
public int peek() {
if (isEmpty()) {
System.out.println("stack if Empty");
return MyArray.ERROR_NUM;
}
return arrayStack.removeElement(--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;
}
}
Stack(스택)이다.
package ch05;
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;
}
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");
}
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();
}
}
Queue이다.