【閱讀與算法】總結(jié)與鏈表設(shè)計(jì)

對(duì)實(shí)驗(yàn)問題與解決方案的總結(jié)

  • 問題1-觀察者偏見:由于觀察者個(gè)人的動(dòng)機(jī)和預(yù)期導(dǎo)致的錯(cuò)誤(例如不同人對(duì)同一事件的描述大相徑庭)
  • 解決1-標(biāo)準(zhǔn)化和操作性定義:規(guī)范實(shí)驗(yàn)程序、使用理解達(dá)成一致的概念、量化描述、定義自變量與因變量
  • 問題2-期望效應(yīng):研究者給予被試暗示,導(dǎo)致誘發(fā)反應(yīng)的是研究者期望,而不是自變量
  • 解決2-雙盲控制:被試不知道自己參與的實(shí)驗(yàn)是研究什么的,與被試接觸的研究者也不知道被試進(jìn)行了什么實(shí)驗(yàn)操作
  • 問題3-安慰劑效應(yīng):病人接受了無效的藥物或治療后,對(duì)于治療會(huì)產(chǎn)生良好效果的信念導(dǎo)致了身體康復(fù)
  • 解決3-安慰劑控制:在驗(yàn)證某種事物的效果時(shí),添加安慰劑控制組,事物實(shí)驗(yàn)組的效果減去了安慰劑控制組的效果后,才是事物真正的效果。
  • 問題4-個(gè)體差異:被試擁有相同的特性會(huì)讓實(shí)驗(yàn)結(jié)果的適用性降低
  • 解決4-隨機(jī)取樣:樣本內(nèi)諸如性別、種族等特性的分布與研究總體相近,才能作為代表性的樣本
  • 問題5-相關(guān)與因果:高相關(guān)只是表明了兩個(gè)事物以某種方式建立了聯(lián)系,并不意味著一個(gè)事物可以導(dǎo)致另一個(gè)事物的發(fā)生。
  • 解決6-理清邏輯:分辨事物的相關(guān)或因果關(guān)系,避免因混淆二者導(dǎo)致的錯(cuò)誤。

設(shè)計(jì)鏈表

  • 方法:虛擬頭節(jié)點(diǎn) + 鏈表基本操作
  • 代碼
#include <bits/stdc++.h>  // 萬用頭
using namespace std;

class MyLinkedList {
public:
    // 定義鏈表節(jié)點(diǎn)結(jié)構(gòu)體
    struct LinkedNode {
        int val;
        LinkedNode* next;
        LinkedNode(int val):val(val), next(nullptr){}
    };

    // 初始化鏈表
    MyLinkedList() {
        _dummyHead = new LinkedNode(0); // 這里定義的頭結(jié)點(diǎn) 是一個(gè)虛擬頭結(jié)點(diǎn),而不是真正的鏈表頭結(jié)點(diǎn)
        _size = 0;
    }

    // 獲取到第index個(gè)節(jié)點(diǎn)數(shù)值,如果index是非法數(shù)值直接返回-1, 注意index是從0開始的,第0個(gè)節(jié)點(diǎn)就是頭結(jié)點(diǎn)
    int get(int index) {
        if (index > (_size - 1) || index < 0) {
            cout<<"出錯(cuò)! get(int index)中index為"<< index <<endl;
            return -1;
        }
        LinkedNode* cur = _dummyHead->next;
        while(index--){ // 如果--index 就會(huì)陷入死循環(huán)
            cur = cur->next;
        }
        return cur->val;
    }

    // 在鏈表最前面插入一個(gè)節(jié)點(diǎn),插入完成后,新插入的節(jié)點(diǎn)為鏈表的新的頭結(jié)點(diǎn)
    void addAtHead(int val) {
        LinkedNode* newNode = new LinkedNode(val);
        newNode->next = _dummyHead->next;
        _dummyHead->next = newNode;
        _size++;
    }

    // 在鏈表最后面添加一個(gè)節(jié)點(diǎn)
    void addAtTail(int val) {
        LinkedNode* newNode = new LinkedNode(val);
        LinkedNode* cur = _dummyHead;
        while(cur->next != nullptr){
            cur = cur->next;
        }
        cur->next = newNode;
        _size++;
    }

    // 在第index個(gè)節(jié)點(diǎn)之前插入一個(gè)新節(jié)點(diǎn),如果index為0,那么新插入的節(jié)點(diǎn)為鏈表的新頭節(jié)點(diǎn)。
    // 如果index 等于鏈表的長度,則說明是新插入的節(jié)點(diǎn)為鏈表的尾結(jié)點(diǎn)
    // 如果index大于鏈表的長度或index為負(fù)數(shù),則返回空
    void addAtIndex(int index, int val) {
        if (index > _size ||  index < 0) {
            cout<<"出錯(cuò)! addAtIndex(int index, int val)中index為"<< index <<endl;
            return;
        }
        LinkedNode* newNode = new LinkedNode(val);
        LinkedNode* cur = _dummyHead;
        while(index--) {
            cur = cur->next;
        }
        newNode->next = cur->next;
        cur->next = newNode;
        _size++;
    }

    // 刪除第index個(gè)節(jié)點(diǎn),如果index 大于等于鏈表的長度,直接return,注意index是從0開始的
    void deleteAtIndex(int index) {
        if (index >= _size || index < 0) {
            cout<<"出錯(cuò)! deleteAtIndex(int index)中index為"<< index <<endl;
            return;
        }
        LinkedNode* cur = _dummyHead;
        while(index--) {
            cur = cur ->next;
        }
        LinkedNode* tmp = cur->next;
        cur->next = cur->next->next;
        delete tmp;
        _size--;
    }

    // 打印鏈表
    void printLinkedList() {
        LinkedNode* cur = _dummyHead;
        while (cur->next != nullptr) {
            cout << cur->next->val << " ";
            cur = cur->next;
        }
        cout << endl;
    }
private:
    int _size;
    LinkedNode* _dummyHead;

};
int main() {

    MyLinkedList linkedList;
    linkedList.addAtHead(1);
    linkedList.addAtTail(3);
    linkedList.addAtIndex(1,2); //鏈表變?yōu)?-> 2-> 3
    linkedList.printLinkedList();
    cout<<linkedList.get(1)<<endl; //返回2
    linkedList.deleteAtIndex(1); //現(xiàn)在鏈表是1-> 3
    cout<<linkedList.get(1)<<endl; //返回3

    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容