添加对象指针到链表c++



我正在寻找一个帮助理解链表。我有这样一个任务:aclass DNAList:

  1. 这个类是一个节点链表,它有指向DNA对象的指针(不是副本),并且至少应该包含:
    • 合适的构造函数和析构函数
    • 要存储的数据成员:指针指向列表
  2. 一个DNANode结构体或类,包含指向DNA对象的指针和指向DNANode对象的"next"指针(如果使用双链表,还有"prev"指针)。
  3. push_back(DNA* newDNA)方法,将节点添加到列表的末尾
  4. 一个find(int id)方法,如果列表中存在id的DNA对象,则返回一个DNA*;否则返回NULL
  5. 一个obliterate(int id)方法,用于删除带有加入号id的DNA条目并删除相应的节点
  6. 一个int size()方法,返回列表中元素的个数

首先,我尝试做push_back(DNA* newDNA)方法。请帮忙好吗?

谢谢。

DNAList.h

#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()

相关内容

  • 没有找到相关文章

最新更新