[C++] 큐(Queue)를 연결리스트로 구현해보자

2021. 10. 19. 15:41·Programming Language/C++
반응형
큐의 정의 : 리스트의 한쪽 끝에서만 삽입과 삭제가 일어나는 스택과는 달리 리스트의 한쪽 끝에서는 원소들이 삭제되고 반대쪽 끝에서는 원소들의 삽입만 가능하게 만든 순서화된 리스트. 가장 먼저 리스트에 삽입된 원소가 가장 먼저 삭제되므로 선입 선출(先入先出)인 FIFO(first in first out) 리스트라고 한다.

[네이버 지식백과] 큐 [queue] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 전산용어사전편찬위원회)

 

#include <iostream>
using namespace std;

class LinkedList {
private:    
    class Node {
    public:
        int data;
        Node* next;
    };    

    Node* Head = new Node;    
    Node* newNode = new Node;    
public:                                          
    LinkedList() { 
        Head->next = NULL;                                
    }

    void insert(int num) {       
        Node* Cursor = Head;
        Node* newNode = new Node;        
        newNode->data = num;                       
        
        //노드가 없을 때
        if (Head->next == NULL) {
            Head->next = newNode;
            newNode->next = NULL;
        }
        else {      //노드가 하나라도 있을 때
            while (Cursor->next != NULL) {
                Cursor = Cursor->next;
            }

            Cursor->next = newNode;
            newNode->next = NULL;
        }        
    }

    void printall() {        
        Node* Cursor;
        Cursor = Head->next;

        while (Cursor != NULL) {
            cout << Cursor->data << "-->";
            Cursor = Cursor->next;
        }
        cout << "끝" << endl;
    }

    int remove() {
        Node* temp = Head->next;
        if (Head->next != NULL) {
            int tempNum = temp->data;
            Head->next = Head->next->next;

            delete(temp);
            return tempNum;
        }
        else {
            return -1;
        }        
    }

    int isEmpty() {
        if (Head->next == NULL) {
            return 1;
        }
        else {
            return 0;
        }
    }    
};

int main() {
    LinkedList myList;  int num;
    //myList.init();  // 시작 포인터 초기화 생성자를 배웠으므로 생략
    while (cin >> num) {
        myList.insert(num);
    }
    myList.printall();  // 모든 항목을 입력된 순서대로 출력한다.

    //// 이제 하나씩 빼자.    
    while (!myList.isEmpty()) {
        num = myList.remove();
        cout << "빼낸 항목: " << num << endl;
        myList.printall();  // 남은 항목을 출력
    }
    return 0;
    
}

 

Linked list로 구성된 정수를 삽입할 수 있는 큐를 구현해봤습니다.

 

insert 메소드에서 삽입한 순서대로 저장되며 ( 예: 1, 2, 3 을 입력했다면  1-> 2-> 3 순서로 저장)
remove 메소드는 첫째 항목을 삭제하면서 동시에 값을 돌려줍니다.


실행 예: 
11 22 33 44 입력시:

시작: 11-->22-->33-->44-->끝
빼낸 항목: 11
시작: 22-->33-->44-->끝
빼낸 항목: 22
시작: 33-->44-->끝
등등

 

 

반응형
저작자표시 비영리 (새창열림)

'Programming Language > C++' 카테고리의 다른 글

[C++] 복소수를 다루는 class 만들기  (0) 2021.10.19
'Programming Language/C++' 카테고리의 다른 글
  • [C++] 복소수를 다루는 class 만들기
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (149) N
      • Spring (10)
      • Infra & Messaging (5)
      • Database (6)
        • SQL (5)
      • Vibe Coding(with AI) (1) N
      • FrontEnd (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • Programming Language (33)
        • C (3)
        • C++ (2)
        • Java (19)
        • PHP (7)
      • 프로젝트 (2)
      • EtcTech (9)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    SQL고득점키트
    1330
    DB
    윤년
    백준
    2588
    프로그래머스
    2753
    평년
    C
    SQL
    9498
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[C++] 큐(Queue)를 연결리스트로 구현해보자
상단으로

티스토리툴바