我创建了一个名为“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/