Sobes.tech
Junior — Middle

Сіз кезек деректер құрылымы қалай жүзеге асырылғанын түсіндіре аласыз ба?

sobes.tech AI

AI-дан жауап

Кезек — бұл FIFO (бірін кіргізген — бірін шығарады) принципі бойынша жұмыс істейтін деректер құрылымы, яғни бірінші кірген элемент бірінші шығарылады.

Кезекті жүзеге асыру әдетте:

  • Массив немесе байланысқан тізім элементтерді сақтау үшін.
  • Екі көрсеткіш немесе индексті: front (кезектің басы) және rear (кезектің соңы).

Негізгі операциялар:

  • enqueue — элементті кезектің соңына қосу;
  • dequeue — элементті кезектің басынан шығару;
  • peek/front — бірінші элементті қарау, шығарып алмай.

C++ тілінде массив пен айналмалы буферді пайдалану мысалы:

class Queue {
    int* arr;
    int capacity;
    int front;
    int rear;
    int count;

public:
    Queue(int size) {
        arr = new int[size];
        capacity = size;
        front = 0;
        rear = -1;
        count = 0;
    }

    void enqueue(int item) {
        if (count == capacity) throw std::overflow_error("Кезек толы");
        rear = (rear + 1) % capacity;
        arr[rear] = item;
        count++;
    }

    int dequeue() {
        if (count == 0) throw std::underflow_error("Кезек бос");
        int item = arr[front];
        front = (front + 1) % capacity;
        count--;
        return item;
    }

    int size() {
        return count;
    }

    bool isEmpty() {
        return count == 0;
    }

    ~Queue() {
        delete[] arr;
    }
};

Мұндай тәсіл жадыны тиімді пайдаланып, операцияларды тұрақты уақыт ішінде орындауға мүмкіндік береді.