iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
自我挑戰組

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

串列結構:環狀串列

  • 分享至 

  • xImage
  •  

繼前面學習的單向串列之後,我們將進一步探討另一種常見的串列結構,即環狀串列 (Circular Linked List)。這種串列結構與單向串列有相似之處,但它具有一個獨特的特點:最後一個節點指向頭部節點,形成一個環狀結構。

環狀串列的基本概念
環狀串列與單向串列的主要區別在於它沒有任何節點指向 nullptr。相反,最後一個節點將指向頭部節點。由於這個特點,環狀串列的遍歷比單向串列要複雜一些,因為它可能會造成無窮迴圈。

C++中的環狀串列實現
以下是一個基本的環狀串列在C++中的實現:

#include <iostream>

class Node {
public:
    int data;
    Node* next;

    Node(int value) : data(value), next(nullptr) {}
};

class CircularLinkedList {
private:
    Node* head;

public:
    CircularLinkedList() : head(nullptr) {}

    // 插入節點到串列尾端
    void append(int value) {
        Node* newNode = new Node(value);
        if (!head) {
            head = newNode;
            newNode->next = head;
        } else {
            Node* current = head;
            while (current->next != head) {
                current = current->next;
            }
            current->next = newNode;
            newNode->next = head;
        }
    }

    // 列印串列中的所有元素
    void printList() const {
        if (!head) return;

        Node* current = head;
        do {
            std::cout << current->data << " -> ";
            current = current->next;
        } while (current != head);

        std::cout << "(back to head)" << std::endl;
    }

    // ... 其他方法例如刪除節點、查找節點等 ...
};

int main() {
    CircularLinkedList cll;
    cll.append(5);
    cll.append(10);
    cll.append(15);
    cll.printList();
    return 0;
}

環狀串列的操作
環狀串列的操作大多數與單向串列相似,但由於其環狀結構,某些操作需要特別處理以避免無窮迴圈。

  • 插入:在串列的頭部、尾部或中間插入節點時,要確保最後一個節點始終指向頭部節點。
  • 刪除:刪除節點時,需要特別小心更新指向頭部的指針。
  • 查找:查找操作與單向串列相似,但要確保在到達串列的開頭之前停止查找。

總結
環狀串列為我們提供了一個有趣的數據結構,它在某些應用中,如循環緩存、約瑟夫問題等,可能特別有用。


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

尚未有邦友留言

立即登入留言