c++ - 将指向传感器的指针添加到链表

标签 c++ class pointers linked-list

我创建了一个名为“SensorNode”的类,每个 SensorNode 都有一个传感器链接列表。 SensorNode 的一个数据成员是名为 mySensors 的 SensorBlock(链表)指针。 mySensors 指向它所在的传感器节点所拥有的传感器链表中的第一个传感器。这是 SensorNode 的类声明:

class SensorNode {
    char* NodeName;
    int NodeID;
    LOCATION Node1;
    float batt;
    int func;
    SensorBlock *mySensors;


public:
    SensorNode(char *n, float x, float y, float z, int i, float ah);
    void print();
    void setOK(int o);
    int getOK();
    void setLOC(float longi, float lat, float h);
    int amIThisSensorNode(char *n);
    void addSensorToNode(sensor *s);
};

这是 SensorBlock 的类声明:

class SensorBlock {

    friend class SensorNode;
    SensorBlock * LLelement;
    sensor * SensEl;
};

在 addSensorToNode 函数中,如何将指向的传感器添加到链表中。基本上,我所拥有的在下面,我试图弄清楚“else”语句中的内容。我查看了教程,但它们是用于创建新对象并添加它,这是用于添加指向对象的指针。

void SensorNode::addSensorToNode(sensor *s) {
    if(mySensors == '\0')
    {
        mySensors->SensEl = s;
    }
    else{
    //maybe something like this???
       // mySensors->SensEl =s;
       // mySensors->LLelement++;

    }
}

最佳答案

至少,单向链表由一个指向头节点的指针组成,每个节点都包含一个指向下一个节点的指针。

例如:

// list -> +-------+   +-------+
//         | next -+-> | next -+-> ...
//         | data  |   | data  |
//         +-------+   +-------+
struct ListNode {
    ListNode *next;
    void *data;
};
typedef ListNode *List;

显然你的命名方案与此冲突,数据是一个传感器,但你明白了。

现在,将它与您的代码进行比较,它看起来像:

  • 您的SensorBlock 确实是一个名称奇怪的列表节点,
  • 你的SensorBlock::SensEl是节点的数据负载
  • 你的 SensorBlock::LLelement 是下一个指针

如果奇怪的命名方案是您的障碍,您应该能够查看任何标准文本(或维基百科,或其他任何内容)并了解单链表的工作原理。

因此,标准的 push_front 看起来像这样:

void SensorNode::addSensorToNode(sensor *s) {
    SensorBlock *block = new SensorBlock; // create the new node
    block->SensEl = s;                    // attach its payload
    block->LLelement = mySensors;         // connect it to the list
    mySensors = block;                    // make it the new head
}

请注意,它会自动处理 NULL 头(您确实在构造函数中将 mySensors 初始化为 NULL,对吧?)。

关于c++ - 将指向传感器的指针添加到链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16887099/

相关文章:

c - 无法识别的指针行为

c++ - 数据结构——指向自身的 C++ 指针

c++ - Python 比 C++ 更快更轻吗?

C++ OpenCV 使用 vector<Point> 作为矩阵的索引

PHP 类和 MySQL

c++ - 有条件地在类中创建成员

html - 在 CSS 中设置文本框样式的最佳方式

c++ - 指向类数据成员 "::*"的指针

c++ - 在qt中的gstreamer视频上覆盖小部件

c - 传递给函数的结构指针