ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • c++ 벡터 이용 FIFO
    카테고리 없음 2022. 8. 6. 16:40

    int ,char : stack 메모리 할당

    new :heap 메모리 할당

     

    push_back()을 통해 벡터에 원소를 넣을 수 있다

    맨 뒤에 원소를 추가하게 된다.

    다 차게 되면 새로운 곳에 더 큰 공간을 할당받기 때문에 이 때는 O(n)의 시간 복잡도를 가진다.

    아닐경우 원소를 추가하는 작업은 O(1)이다.

     

    pop_back()을 통해 벡터의 제일 마지막에 있는 원소를 제거할 수 있다.

    스택과 큐

    #include <queue>를 쓴다

    push_back() 대신 push()을 쓰고

    pop_back() 대신 pop()을 쓴다.

    pop()에서 큐(FIFO)는 제일 앞의 원소를 제거한다.

    스택은 맨뒤의 원소를 제거한다.

    벡터와 달리 []을 통한 원소의 접근이 불가능하고

    큐는 front()을 통해 맨 앞의 원소를, back()을 통해 맨뒤의 원소를 접근할 수 있다.

    int main(){
        deque<int> temp;

        temp.push_back(1);

        temp.push_back(2);

        temp.push_front(3);

        temp.push_front(4);

        int k = temp.size();

        for(int i=0;i<k;i++);

            cout << temp[i] << '\n';

        }

        return 0;

    }

    결과는 4 3 1 2 이다.

    1,2 는 큐이므로, FIFO이다.

     

    #include <stdio.h>
    #include <iostream>
    // vector를 사용하기 위해서는 추가한다.
    #include <vector>
    using namespace std;
    // Stack 알고리즘은 FILO(First input Last output)의 성질을 가지고 있다.
    // 즉, 가장 먼저 입력된 데이터가 가장 마지막에 나오는 자료구조이다.
    template <typename T>
    class Stack
    {
    private:
      // vector를 사용
      vector<T> v;
    public:
      // 값을 넣기
      void push(T val)
      {
        v.push_back(val);
      }
      // 값을 빼기 (FILO 구조)
      T pop()
      {
        // 가장 마지막에 넣은 데이터를 취득
        T ret = v.back();
        // 가장 마지막 데이터를 삭제
        v.pop_back();
        // 결과 반환
        return ret;
      }
      // 데이터가 비어 있는 지 확인하는 함수
      bool empty()
      {
        return v.empty();
      }
    };
    // Queue 알고리즘은 FIFO(First input First output)의 성질을 가지고 있다.
    // 즉, 가장 먼저 입력된 데이터가 가장 먼저 나오는 자료구조이다.
    template <typename T>
    class Queue 
    {
    private:
      // vector를 사용
      vector<T> v;
    public:
      // 값을 넣기
      void push(T val)
      {
        v.push_back(val);
      }
      // 값을 빼기 (FIFO 구조)
      T pop()
      {
        // 가장 처음에 넣은 데이터를 취득
        T ret = v.front();
        // 맨 처음 데이터를 삭제
        v.erase(v.begin());
        // 결과 반환
        return ret;
      }
      // 데이터가 비어 있는 지 확인하는 함수
      bool empty()
      {
        return v.empty();
      }
    };
    // 실행 함수
    int main()
    {
      // Stack 알고리즘 선언
      Stack<const char*> stack;
      // 순서대로 입력..
      stack.push("Hello world");
      stack.push("good");
      // 콘솔 출력
      cout << "Stack Result " << endl;
      // stack이 전부 빌때까지 출력
      while (!stack.empty())
      {
        // 콘솔 출력... 입력된 반대로 순서로 출력
        cout << stack.pop() << endl;
      }
      // 개행 출력
      cout << endl;
      // Queue 알고리즘 선언
      Queue<const char*> queue;
      // 순서대로 입력..
      queue.push("Hello world");
      queue.push("good");
      // 콘솔 출력
      cout << "Queue Result " << endl;
      // stack이 전부 빌때까지 출력
      while (!queue.empty())
      {
        // 콘솔 출력... 입력된 순서로 출력
        cout << queue.pop() << endl;
      }
      // 개행 출력
      cout << endl;
     
      return 0;
    }

    출처: https://nowonbun.tistory.com/733 [명월 일지:티스토리]

Designed by Tistory.