iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

C++ AI 起步:編程進入智能世界系列 第 26

佇列演算法:陣列實作佇列

  • 分享至 

  • xImage
  •  

佇列是計算中常見的資料結構之一,遵循先進先出 (FIFO) 的原則。佇列通常用於資料的有序處理,例如在打印任務或其他先到先得的場景中。在本文中,我們將使用 C++ 的陣列來實作一個簡單的佇列。

什麼是佇列?
佇列是一種特殊的線性資料結構,只允許在一端插入元素,並在另一端刪除元素。插入的一端稱為「尾端」或「rear」,而刪除的一端稱為「前端」或「front」。

使用陣列實作佇列
使用陣列實作佇列是一種常見的實作方法。以下是其基本結構和操作:

#include <iostream>

const int QUEUE_SIZE = 5;

class Queue {
private:
    int arr[QUEUE_SIZE];
    int front;
    int rear;

public:
    Queue() {
        front = -1;
        rear = -1;
    }

    // 判斷佇列是否為空
    bool isEmpty() {
        return (front == -1 && rear == -1);
    }

    // 判斷佇列是否已滿
    bool isFull() {
        return (rear + 1) % QUEUE_SIZE == front;
    }

    // 入佇列
    void enqueue(int x) {
        if (isFull()) {
            std::cout << "Queue is full!" << std::endl;
            return;
        } else if (isEmpty()) {
            front = rear = 0;
        } else {
            rear = (rear + 1) % QUEUE_SIZE;
        }
        arr[rear] = x;
    }

    // 出佇列
    int dequeue() {
        if (isEmpty()) {
            std::cout << "Queue is empty!" << std::endl;
            return -1;
        } else if (front == rear) {
            int temp = arr[front];
            front = rear = -1;
            return temp;
        } else {
            int temp = arr[front];
            front = (front + 1) % QUEUE_SIZE;
            return temp;
        }
    }

    // 查看佇列前端的元素
    int peek() {
        if (isEmpty()) {
            std::cout << "Queue is empty!" << std::endl;
            return -1;
        }
        return arr[front];
    }
};

int main() {
    Queue q;
    q.enqueue(5);
    q.enqueue(10);
    q.enqueue(15);
    std::cout << "Front of the queue: " << q.peek() << std::endl; // 5
    q.dequeue();
    std::cout << "Front of the queue: " << q.peek() << std::endl; // 10
    return 0;
}

總結
使用陣列實作佇列提供了一個簡單而有效的方式來管理和操作佇列資料結構。然而,這種方法有其局限性,例如固定的大小。在接下來的文章中,我們將探討如何使用連結串列來實作一個動態的、無固定大小的佇列。


上一篇
堆疊演算法:遞迴式
下一篇
佇列演算法:串列實作佇列
系列文
C++ AI 起步:編程進入智能世界32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言