자바

JAVA STEP 35. Queue&Stack 직접 구현하기

2023. 2. 23. 17:55
728x90

★ MyQueue 직접 구현하기

  • 조건
  • 1. 행동
    • boolean add(String value)
      • 값을 순차적으로 추가한다.
      • value: 추가할 요소의 값
      • return: 성공 유무
    • String poll()
      • 값을 순차적으로 가져온다.
      • return: 가져올 요소의 값
    • int size()
      • 요소의 개수를 반환한다.
      • return: 요소의 개수
    • String peek()
      • 이번에 가져올 값을 확인한다.
      • value: 값 반환
    • void clear()
      • 배열의 모든 요소를 삭제한다.
    • void trimToSize()
      • 배열안의 요소의 개수만큼 배열의 길이를 줄인다.
  • 2. 소스코드
  •  
package com.test.question;

public class MyQueue {
	private String[] list;
	private int index;
	
	public MyQueue() {
		this.list = new String[4];
		this.index = 0;
	}
	
	public boolean add(String value) {
		
		//인자값을 배열에 차례대로 넣기 > Append
		
		//검사 > 방이 모자란지? > 배열 2배 확장(깊은 복사)
		if(checkList()) {
			doubleList();
		}
		this.list[this.index] = value;
		this.index++;
		
		return true;
	}
	//index의 길이가 현재 list의 길이와 같은지 즉, 방이 꽉찼는지 검사
	public boolean checkList() {
		if(this.index == this.list.length) {
			return true;
		}
		return false;
	}
	//배열의 길이가 꽉 찼다면, 배열의 길이를 2배로 늘려주는 연산
	public void doubleList() {
		String[] temp = new String[this.list.length*2];
		
		for(int i=0; i<this.list.length; i++) {
			temp[i] = this.list[i];
		}
		this.list = temp;
	}
	//값을 순차적으로 가져오고 제거
	public String poll() {
		
		String temp = list[0];
		
		if(this.index > 0) {
			for(int i=0; i<this.list.length-2; i++) {
				this.list[i] = this.list[i+1];
			}
			this.index--;
			return temp;
		}else {
			return "null";
		}
		
	}
	//해당 요소의 개수를 반환
	public int size() {
		return index;
	}
	//이번에 가져올 값을 가져옴.
	public String peek() {
		return this.list[0];
	}
	//모든 요소를 제거
	public void clear() {
		for(int i=0; i<this.index; i++) {
			this.list[i] = null;
		}
		this.index = 0;
	}
	//해당 요소의 사이즈에 맞추어 배열의 길이를 축소
	public void trimToSize() {
		String [] temp = new String [this.index];
		
		for(int i=0; i<index; i++) {
			temp[i] = list[i];
		}
		this.list = temp;
	}
	
	public String toString() {
		
		StringBuilder sb = new StringBuilder();
		
		sb.append(String.format("index : %d\n", this.index));
		sb.append(String.format("length : %d\n", this.list.length));
		
		for(int i=0; i<this.list.length; i++) {
			sb.append(String.format("\t%d : %s\n",i , list[i]));
		}
		
		return sb.toString();
	}
}
package com.test.question;

public class Q0105 {

	public static void main(String[] args) {
		//배열 생성
		MyQueue queue = new MyQueue();

		//추가
		System.out.println("-항목 추가-");
		queue.add("빨강");
		queue.add("노랑");
		queue.add("파랑");
		queue.add("주황");
		queue.add("검정");
		System.out.println();

		//읽기
		System.out.println("-읽기-");
		System.out.println(queue.poll());
		System.out.println(queue.poll());
		System.out.println(queue.poll());
		System.out.println();
		
		//개수
		System.out.println("-개수-");
		System.out.println(queue.size());
		System.out.println();

		//확인
		System.out.println("-확인-");
		System.out.println(queue.peek());
		System.out.println(queue.peek());
		System.out.println(queue.size());
		System.out.println();

		//크기 조절
		System.out.println("-크기 조절-");
		queue.trimToSize();
		System.out.println();

		//초기화
		System.out.println("-초기화-");
		queue.clear();
		System.out.println(queue.size());
		System.out.println();

	}

}

 

  • 실행결과

Myqueue 실행결과

 

★ MyStack 직접 구현하기

  • 조건
  • 1. 행동
    • boolean push(String value)
      • 값을 순차적으로 추가한다.
      • value: 추가할 요소의 값
      • return: 성공 유무
    • String pop()
      • 값을 순차적으로 가져온다.
      • return: 가져올 요소의 값
    • int size()
      • 요소의 개수를 반환한다.
      • return: 요소의 개수
    • String peek()
      • 이번에 가져올 값을 확인한다.
      • value: 값 반환
    • void clear()
      • 배열의 모든 요소를 삭제한다.
    • void trimToSize()
      • 배열안의 요소의 개수만큼 배열의 길이를 줄인다.
  • 2. 소스코드
  •  
package com.test.question;

public class MyStack {

	private String [] list;
	private int index;
	
	public MyStack() {
		this.list = new String[4];
		this.index = 0;
	}
	//값을 순차적으로 추가
	public boolean push(String value) {
		
		//인자값을 배열에 차례대로 넣기 > Append
		
		//검사 > 방이 모자란지? > 배열 2배 확장(깊은 복사)
		if(checkList()) {
			doubleList();
		}
		this.list[this.index] = value;
		this.index++;
		
		return true;
	}
	//index의 길이가 현재 list의 길이와 같은지 즉, 방이 꽉찼는지 검사
	public boolean checkList() {
		if(this.index == this.list.length) {
			return true;
		}
		return false;
	}
	//배열의 길이가 꽉 찼다면, 배열의 길이를 2배로 늘려주는 연산
	public void doubleList() {
		String[] temp = new String[this.list.length*2];
		
		for(int i=0; i<this.list.length; i++) {
			temp[i] = this.list[i];
		}
		this.list = temp;
	}
	//값을 순차적으로 가져온다. 가져온 값은 제거
	public String pop() {
		String temp = this.list[index-1];
		this.list[index-1] = null;
		index--;
		return temp;
	}
	//요소의 개수를 반환
	public int size() {
		return this.index;
	}
	//이번에 가져올 값을 확인한다.
	public String peek() {
		return this.list[index-1];
	}
	//배열의 모든 요소를 삭제한다.
	public void clear() {
		for(int i=0; i<this.index; i++) {
			this.list[i] = null;
		}
		this.index = 0;
	}
	//배열안의 요소의 개수만큼 배열의 길이를 줄인다.
	public void trimToSize() {
		String [] temp = new String [this.index];
		
		for(int i=0; i<index; i++) {
			temp[i] = list[i];
		}
		this.list = temp;
	}
	
	public String toString() {
		
		StringBuilder sb = new StringBuilder();
		
		sb.append(String.format("index : %d\n", this.index));
		sb.append(String.format("length : %d\n", this.list.length));
		
		for(int i=0; i<this.list.length; i++) {
			sb.append(String.format("\t%d : %s\n",i , list[i]));
		}
		
		return sb.toString();
	}
	
}
package com.test.question;

public class Q0106 {

	public static void main(String[] args) {
		
		//배열 생성
		MyStack stack = new MyStack();
		
		//추가
		System.out.println("-추가-");
		stack.push("빨강");
		stack.push("노랑");
		stack.push("파랑");
		stack.push("주황");
		stack.push("검정");
		System.out.println();

		//읽기
		System.out.println("-읽기-");
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println(stack.pop());
		System.out.println();

		//개수
		System.out.println("-개수-");
		System.out.println(stack.size());
		System.out.println();
		
		//확인
		System.out.println("-확인-");
		System.out.println(stack.peek());
		System.out.println(stack.peek());
		System.out.println(stack.size());
		System.out.println();

		//크기 조절
		System.out.println("-크기 조절-");
		stack.trimToSize();
		System.out.println();

		//초기화
		System.out.println("-초기화-");
		stack.clear();
		System.out.println(stack.size());
	}

}

 

  • 실행결과

MyStack 실행결과

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'자바' 카테고리의 다른 글

JAVA STEP 37. HashMap 직접 구현하기  (0) 2023.02.24
JAVA STEP 36. 컬렉션(HashMap)  (0) 2023.02.24
JAVA STEP 34. 컬렉션(Queue&Stack)  (0) 2023.02.23
JAVA STEP 33. ArrayList 직접 구현하기  (0) 2023.02.23
JAVA STEP 32. 컬렉션(ArrayList)  (0) 2023.02.23
'자바' 카테고리의 다른 글
  • JAVA STEP 37. HashMap 직접 구현하기
  • JAVA STEP 36. 컬렉션(HashMap)
  • JAVA STEP 34. 컬렉션(Queue&Stack)
  • JAVA STEP 33. ArrayList 직접 구현하기
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
Developer Story HouseIT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • 백준
  • 코딩테스트
  • 앱개발자
  • 알고리즘
  • jsp
  • ajax
  • IT자격증
  • 자바
  • 정보처리기사
  • JavaScript
  • 백엔드
  • css
  • 웹개발
  • java
  • it
  • IT개발자
  • 정보처리기사필기
  • DBA
  • 개발자
  • html
  • DB
  • 웹페이지
  • 정보보안전문가
  • IT자격증공부
  • React
  • 개발블로그
  • 웹개발자
  • 데이터베이스
  • jquery
  • 프론트엔드

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 35. Queue&Stack 직접 구현하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.