我有这个结构:
struct Node {
int number;
Node *next;
};
这个类要插入元素并显示向量:
// Classe DynamicVector :
// e' la classe che consente di inserire elementi
// e visualizzare il vettore di strutture
class DynamicVector
{
public:
DynamicVector();
void InsertNumber(int number);
void ShowVector();
protected:
Node *p;
};
这是实施:
DynamicVector::DynamicVector() {
this->p = NULL;
}
void DynamicVector::InsertNumber(int number) {
Node *temporary = new Node;
// Possiamo avere due possibili casi:
// non e' stato ancora inserito nessun elemento
// ...
if (this->p == NULL) {
temporary->number = number;
temporary->next = NULL;
this->p = temporary;
// ...
// oppure dobbiamo aggiungerne uno alla fine
// In questo caso meglio dire, lo "accodiamo"
} else {
// Sfogliamo le strutture fino a giungere
// all' ultima creata
while (this->p->next != NULL) {
this->p = this->p->next;
}
temporary->number = number;
temporary->next = NULL;
// In questo passaggio copiamo la struttura
// temporanea "temporary" nell' ultima struttura "p"
this->p->next = temporary;
}
}
void DynamicVector::ShowVector() {
while (this->p != NULL) {
std::cout << this->p->number << std::endl;
this->p = this->p->next;
}
}
在主要功能中我写了这个:
#include <iostream>
#include <conio.h>
#include "dynamic_vector.h"
int main() {
DynamicVector *vector = new DynamicVector();
vector->InsertNumber(5);
vector->InsertNumber(3);
vector->InsertNumber(6);
vector->InsertNumber(22);
vector->ShowVector();
delete vector;
getch();
return 0;
}
我不知道为什么,但它只显示最后两个数字。 有人知道为什么吗?
答案 0 :(得分:1)
它只显示最后两个数字,因为当您插入新数字时,您正在将头部移动到下一个节点。您有两个选项可以打印整个矢量。
if (this->p == NULL) {
temporary->number = number;
temporary->next = NULL;
this->p = temporary;
// ...
// oppure dobbiamo aggiungerne uno alla fine
// In questo caso meglio dire, lo "accodiamo"
} else {
// Sfogliamo le strutture fino a giungere
// all' ultima creata
Node* temp2 = this->p;
while (temp2->next != NULL) {
temp2 = temp2->next;
}
temporary->number = number;
temporary->next = NULL;
// In questo passaggio copiamo la struttura
// temporanea "temporary" nell' ultima struttura "p"
temp2->next = temporary;
}
或在main()中,存储向量的第一个节点的位置,并将其用于打印
DynamicVector *vector = new DynamicVector();
DynamicVector *vector2 = vector;
...
vector2->ShowVector();
答案 1 :(得分:0)
while (this->p->next != NULL) {
this->p = this->p->next;
}
在此代码中,您将跳过所有现有节点,并且这些节点将丢失。即当p不为NULL时调用它然后将p重置为NULL。代码没有意义,它等于p = NULL。
要么改变它,要么
vector->InsertNumber(5)->InsertNumber(3)->InsertNumber(6)->InsertNumber(22);
(你必须从InsertNumber返回“this”);
或者你可以做到这两点。