• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [자료 구조] 6. 큐 구현하기
        2024년 05월 07일
        • Song hyun
        • 작성자
        • 2024.05.07.:25
        728x90
        반응형

        [자료구조] 6. 큐 구현하기

        1. 큐(Queue)란?

        2. 배열을 사용해 큐 구현하기

        3. 배열을 사용해 큐를 순환 구조로 구현하기


         

        1. 큐(Queue)란?

        (1) 큐의 개념

        큐(Queue)는 데이터를 저장하는 선형 자료구조로, 차례를 기다리는 줄이라는 의미를 지니고 있다. 먼저 들어온 자료부터 순서대로 처리하는 방식을 큐(Queue)라고 말한다.

         

        큐는 한 쪽 끝에서는 자료의 삽입 연산, 반대쪽 끝에서는 삭제만 가능한 구조이다.

        즉, 선입선출(FIFO: First In First Out)의 특징을 지닌다.

         

        (2) 큐의 특징

        -맨 앞(front)에서 자료를 꺼내거나, 삭제하고, 맨 뒤(rear)에서 자료를 추가한다.

        -선입선출(FIFO) 구조

        -일상 생활에서 일렬로 줄 서 있는 모양과 유사하다.

        -순차적으로 입력된 자료를 순서대로 처리하는데에 많이 사용되는 자료구조.

        -콜센터에 들어온 문의전화, 메세지 등에 큐가 사용된다.

         

        *우선 순위 큐(Priority Queue): 원소들을 우선순위에 따라 저장한다. 큐의 FIFO 구조를 따라가지 않는 유일한 큐이다.


        2. 배열을 사용해 큐 구현하기

         

        *아래의 방식은 큐의 끝에 도달했을 때, 자동으로 시작 위치로 돌아가지 않으므로 일반적인 큐의 동작 방식이다.

        (순환 방식이 아니다.)

        package Structure.ch03;
        
        public class IntArrayQueue {
        
        	private int[] array;
        	private int front; // 큐의 시작 점
        	private int rear; // 큐의 끝 지점
        	private int capacity; // 큐의 용량
        	private int size; // 요소의 개수
        
        	public IntArrayQueue(int capacity) {
        		this.capacity = capacity;
        		array = new int[this.capacity];
        		this.front = 0; // 시작점이 0이다
        		this.rear = -1; //
        		this.size = 0;  
        	} // 생성자
        	
        	// 편의 기능 만들어보기
        	public boolean isEmpty() {
        		return size == 0; // 비어있다면 true, 아니라면 false
        	}
        	
        	public boolean isFull() {
        		return size == capacity; // 가득 찼다면 true, 아니라면 false
        	}
        	
        	// todo 1 - 데이터 넣기 기능 구현
        	public void enqueue(int item) {
        		if(isFull()) {
        			System.out.println("큐 메모리 공간이 가득합니다.");
        		} else {
        			// rear = -1;
        			rear++; // 0 <-- 첫 동작시 
        			array[rear] = item; // array[0] = item;
        			size++;
        		}
        	}
        	
        	// todo 2 - 데이터 꺼내기 기능 구현 
        	public int dequeue() {
        		int item = -9999;
        		if(isEmpty()) {
        			System.out.println("큐 메모리 공간이 비어있습니다.");
        		} else {
        			// 잠시 데이터 꺼내보기
        			item = array[front]; // 0번째 요소를 접근
        			//100 200 300
        			// f - 0 (첫 꺼낼 시)
        			for(int i=front; i<rear; i++) { // 0 < 2
        				// array[0] = array[1]
        				// 200, 200, 300 --> 첫번째 동작 (for)
        				// 200, 300, 300 --> 두번째 동작 (for)
        				array[i] = array[i+1]; 
        			}
        			// 200, 300, 0
        			// 마지막 요소를 초기화 처리한다.
        			array[rear] = 0;
        			rear--;
        			size--;
        		}
        		return item;
        	}
        	
        	
        	// todo 3 - 데이터 찾기 기능 구현 (peek)
        	public int peek() {
        		int item;
        		if(isEmpty()) {
        			System.out.println("큐 메모리 공간에 요소가 없습니다.");
        			item=-9999;
        			return item;
        		} else {
        			item=array[front];
        			System.out.println("Peak : "+ item);
        			return item;
        		}
        	}

         


        3. 배열을 사용해 큐를 순환 구조로 구현하기

        -나누기 연산(%)을 이용해 순환 구조의 큐를 구현해보자.

         

        	// todo 1 - 데이터 넣기 기능 구현
        	public void enqueue(int item) {
        			// 코드 수정
        			// [10] [20] [30]
        			// 나머지 연산자를 활용한다.
        			// 1 = 1 % 5; 
        			// 몫 0, 나머지 1
        			// 2 = 2 % 5;
        			// 몫 0, 나머지 2
        			
        			// x =   0  %  3 (임시값 3), rear = 0
        			// x =   1  %  3  --> rear = 1
        			// x =   2  %  3  --> rear = 2
        			// x =   3  %  3  --> rear = 0
        			// x =   1  %  3  --> rear = 1
        			rear = (rear+1) % capacity;
        			array[rear] = item;
        			size++;
        	}
        	
        	// todo 2 - 데이터 꺼내기 기능 구현 
        	public int dequeue() {
        		if(isEmpty()) {
        			System.out.println("Queue is empty.");
        			return -9999;
        		}
        		int item = array[front];
        		// [10] [20] [30]
        		front = (front+1)%capacity;
        		return item;
        	}
        	
        	
        	// todo 3 - 데이터 찾기 기능 구현 (peek)
        	public int peek() {
        		int item;
        		if(isEmpty()) {
        			System.out.println("큐 메모리 공간에 요소가 없습니다.");
        			item=-9999;
        			return item;
        		} else {
        			item=array[front];
        			return item;
        		}
        	}
        	
        	//
        	public void printAll() {
        		if(isEmpty()) {
        			System.out.println("Queue is empty");
        			return;
        		}
        		for(int i=0; i<array.length; i++) {
        			System.out.print(array[i] + " ");
        		}
        		System.out.println();
        	}
        728x90
        반응형

        '자료 구조 > 기본 개념' 카테고리의 다른 글

        [자료 구조] 7. 컬렉션 프레임 워크  (0) 2024.05.09
        [자료 구조] 6. 연결 리스트  (0) 2024.05.08
        [자료 구조] 5. 비선형 자료 구조  (0) 2024.05.03
        [자료 구조] 4. 배열을 활용해 Stack 구현하기  (0) 2024.05.03
        [자료 구조] 3. Java 배열을 활용한 객체 만들기  (0) 2024.05.02
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바