我在寻找帮助来了解链表。我有这样的任务:
类DNAList:


此类是节点的链接列表,这些节点具有指向DNA对象(而不是其副本)的指针,并且至少应包含:


适当的构造函数和析构函数
要存储的数据成员:
 指向列表的指针

一个DNANode结构或类,其中包含指向DNA对象的指针和指向DNANode对象的“下一个”指针(如果使用双链表,则为“上一个”指针)。
一个push_back(DNA * newDNA)方法,将一个节点添加到列表的末尾
如果列表中存在具有id的DNA对象,则该find(int id)方法将返回DNA *;否则返回NULL
一种obliterate(int id)方法,该方法删除具有登录号id的DNA条目并删除相应的节点
一个int size()方法,该方法返回列表中的元素数


首先,我尝试做push_back(DNA * newDNA)方法。
有什么帮助吗?

谢谢。

DNA列表

#ifndef DNALIST_H
#define DNALIST_H
#include <iostream>
#include <string>
#include "DNA.h"


class DNAList{
    //data members
    private:
        DNA* headPtr;
    public:
        DNAList();
        ~DNAList();
        struct DNANode;
        void push_back(DNA* newDNA);
        DNA* find(int id);
        void obliterate(int id);
        int size();
        DNA* getHeadPtr(){
            return headPtr;
        }

       void setHeadPtr(DNA* head){
            headPtr= head;
       }

};

#endif


DNAList.cpp

#include <iostream>
#include <string>
#include "DNAList.h"

//constrictor
    DNAList::DNAList(){}
//destructor
    DNAList::~DNAList(){
        delete headPtr;
        headPtr = NULL;
    }
//struct that holds pointer to a DNA object  and a "next" pointer to a
DNANode object
    struct DNANode{
        DNA* dnaPtr;
        DNANode* next;
    };
//
    void push_back(DNA* newDNA){

        //dnaPtr = new DNANode;

    }

    DNA* find(int id){

    }
    void obliterate(int id){

    }
    int size(){
        return 0;
    }

最佳答案

拥有DNA*链接列表的最简单方法是使用标准<list>容器并使用list<DNA*>。并且为避免内存泄漏,甚至list<shared_ptr<DNA>>

但是您的任务似乎是学习链接列表的一种练习。因此,这里有一些有关您自己的push_back()的提示:

void push_back(DNA* newDNA)
{
    DNANode *element = new DNANode;// create a new node
    element->dnaPtr = newDNA;      // set it up
    element->next = nullptr;       // it has no next element now

    if (headPtr==nullptr)          // hoping you have initalized the head at construction
         headPtr = element;        // either it's first element of empty list
    else {                         // or you need to find the last node
        DNANode *last = headPtr;   // starting at head
        while (last->next)         // and going from node to node
            last = last->next;
        last->next = element;      // here you are
    }
}


然后,您可以从中启发自己编写find()size()(如果您不维护数据元素的大小),甚至是obliterate()

关于c++ - 将对象的指针添加到链接列表C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32431500/

10-11 19:03