iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
Software Development

用C++ 設計程式中的系統櫃系列 第 8

[Day 08] 用C++ 設計程式中的系統櫃:linkedList::pushFront()

  • 分享至 

  • xImage
  •  

在做任何事情之前,我們要先建立一個鏈結串列的物件。

int main() {
    SLL *sll = new SLL;
    DLL *dll = new DLL;
}

我們有了鏈結串列的類別,但是他還沒被建立任何類別方法。接下來,我們就要來實作第一個類別方法。

pushFront(int _data)

這個類別方法遇到最大的難點在於我們會更改到 head ,萬一處理不當整條鏈結串列都會消失。

步驟大致如下:

  1. 新增一個節點,並將他的資料設為傳入的參數 _data
  2. 將新節點的 next 設為原本的 head
  3. head 設為新節點

單向鏈結串列

class SLL {
private:
    SLLNode *head;
public:
    SLL();
    void pushFront(int);
};
void SLL::pushFront(int _data) {
    SLLNode *newNode = new SLLNode(_data);
    newNode -> next = this -> head;
    this -> head = newNode;
}

要不要特別處理「鏈結串列為空」的情況?(head == NULL
不用!因為當我們把 this -> headNULL 置換後,結果仍然是我們要的。


雙向鏈結串列

class DLL {
private:
    DLLNode *head;
public:
    DLL();
    void pushFront(int);
};
void DLL::pushFront(int _data) {
    DLLNode *newNode = new DLLNode(_data);
    if (this -> head == NULL) {
        this -> head = newNode;
        this -> tail = newNode;
        return ;
    }
    this -> head -> prev = newNode;
    newNode -> next = this -> head;
    this -> head = newNode;
}

為什麼要特別處理「鏈結串列為空」的情況?(head == tail == NULL
因為這不只牽扯到 head ,也關係到 tail 的指向。
如果延續上述的做法,head 雖然會指向新的頭部節點,但是 tail 會維持預設的 NULL


使用類別方法

#include <iostream>

// Classes Definition

int main() {
    SLL *sll = new SLL;
    sll -> pushFront(5);
    DLL *dll = new DLL;
    dll -> pushFront(5);
}

目前來說,我們沒有辦法測試這個類別方法是否正確,因為我們需要一個類別方法用來印出鏈結串列的內容。
這個部分就是下一篇的目標!


上一篇
[Day 07] 用C++ 設計程式中的系統櫃:節點的初始化
下一篇
[Day 09] 用C++ 設計程式中的系統櫃:linkedList::printAll()
系列文
用C++ 設計程式中的系統櫃30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言