Deque(by DoublyLinkedList) 구현 코드

한시삼십사분·2022년 1월 15일

자료구조 JAVA

목록 보기
13/16
post-thumbnail

Queue Interface

package Interface_form;

public interface Queue<E> {
	
	/**
	 * 
	 * @param data queue에 추가할 요소
	 * @return 정상적으로 추가되었을 때 true 반환
	 */
	boolean offer(E data);
	
	/**
	 * queue의 첫번 째 요소를 삭제하고 해당 요소를 반환
	 * @return queue의 첫번 째 요소
	 */
	E poll();
	
	/**
	 *	queue의 첫번 째 요소를 삭제하지 않고 반환
	 * @return Queue의 첫번 쨰 요소
	 */
	E peek();
}

Node class


public class Node<E> {
	E data;
	Node<E> next;
	Node<E> prev;
	
	Node(E data){
		this.data = data;
		this.next = null;
		this.prev = null;
	}	
}

LinkedListDeque class

import java.util.NoSuchElementException;

import Interface_form.Queue;

public class LinkedListDeque<E> implements Queue<E> {
	private Node<E> head;
	private Node<E> tail;
	private int size;
	
	public LinkedListDeque() {
		this.head = null;
		this.tail = null;
		this.size = 0;
	}
	// offer method
	public boolean offerFirst(E data) {
		Node<E> newNode = new Node<E>(data);
		newNode.next = head;
		if(head != null) {
			head.prev = newNode;
		}
		
		head = newNode;
		size++;
		
		if(head.next == null) {
			tail = head;
		}
		
		return true;
	}
	
	public boolean offer(E data) {
		return offerLast(data);
	}
	
	public boolean offerLast(E data) {
		if(size == 0) {
			return offerFirst(data);
		}
		
		Node<E> newNode = new Node<E>(data);
		
		tail.next = newNode;
		newNode.prev = tail;
		
		tail = newNode;
		size++;
		
		return true;
	}
	
	// poll / remove method
	public E poll() {
		return pollFirst();
	}
	
	public E pollFirst() {
		if(size == 0) {
			return null;
		}
		
		E element = head.data;
		Node<E> nextNode = head.next;
		
		head.data = null;
		head.next = null;
		if(nextNode != null) {
			nextNode.prev = null;
		}
		
		head = null;
		head = nextNode;
		
		size--;
		
		if(size == 0) {
			tail = head; //head == null
		}
		
		return element;
	}
	
	public E remove() {
		return removeFirst();
	}
	
	public E removeFirst() {
		E element = pollFirst();
		
		if(element == null) {
			throw new NoSuchElementException();
		}
		return element;
	}
	
	public E pollLast() {
		if(size == 0) {
			return null;
		}
		E element = tail.data;
		
		Node<E> prevNode = tail.prev;
		
		tail.data = null;
		tail.prev = null;
		
		if(prevNode!= null) {
			prevNode.next = null;
		}
		
		tail = null;
		tail = prevNode;
		size--;
		
		if(size == 0) {
			head = null;
		}
		
		return element;
	}
	
	public E removeLast() {
		E element = pollLast();
		if(element == null) {
			throw new NoSuchElementException();
		}
		return element;
	}
	
	
	// peek / element method
	
	public E peek() {
		return peekFirst();
	}
	
	public E peekFirst() {
		if(size == 0) {
			return null;
		}
		return head.data;
	}
	
	public E peekLast() {
		if(size == 0) {
			return null;
		}
		return tail.data;
	}
	
	public E element() {
		return getFirst();
	}
	
	public E getFirst() {
		E element = peek();
		
		if(element == null) {
			throw new NoSuchElementException();
		}
		return element;
	}
	
	public E getLast() {
		E element = peekLast();
		if(element == null) {
			 throw new NoSuchElementException();
		}
		return element;
	}
	
	//other methods
	
	public int size() {
		return size;
	}
	
	public boolean isEmpty() {
		return size == 0;
	}
	
	public boolean contains(E data) {
		Node<E> n = head;
		for(; n != null; n = n.next) {
			if(data.equals(n.data)) {
				return true;
			}
		}
		return false;
	}
	
	public void clear() {
		for(Node<E> n = head; n!= null;) {
			Node<E> nextNode = n.next;
			n.data = null;
			n.prev = null;
			n.next = null;
			
			n = nextNode;
		}
		
		size = 0;
		head = tail = null;
	}
	
}

https://st-lab.tistory.com/161?category=856997
내가 직접 코딩해보고 사이트를 확인하여 수정하는 방법으로 구현을 진행했음

profile
인간은 망각의 동물이라지만 이건 너무한 거 아니냐고

0개의 댓글