我想知道如何将值存储到结构中,该结构是结构链表的一部分。我有:
struct polynomial
{
polynomial(string newCoefficient, string newPower, polynomial *nextPtr);
string coefficient;
string power;
polynomial *next;
};
class linkedList
{
public:
void createList();
private:
polynomial *head;
};
对于此赋值,我们需要在收集输入值时进行一些解析。例如,我们要输入两个用空格分隔的数字(例如7 9或10 8)。因此,在void createList()中,我希望使用字符串读取一行,将其转换为char数组以去除值,然后将该值存储到polynomof.coefficient和polynomial.power中,用于链表中的每个节点。
或者,我正在搜索一些信息,我想也许我可以输入两个int值,然后使用stringstream将它们转换为字符串,然后存储到系数和功率中。
无论哪种方式,您能否帮我介绍将值存储到链接的列出结构中的概念?
编辑:我添加了重载的构造函数:
polynomial:: polynomial ( string newCoefficient, string newPower, polynomial *nextPtr )
{
coefficient = newCoefficient;
power = newPower;
next = nextPtr;
};
答案 0 :(得分:2)
您正在将C风格的练习与C ++实践相结合。
在C ++中,您通常将数据与容器分开。看看std::list
的工作原理。
即使你不想进入模板,你仍然可以这样做:
struct polynomial {
string coefficient;
string power;
};
struct listnode {
polynomial data;
listnode *next;
};
如果你真的想拥有head
概念,你可以保留一个'虚拟头'来存储一个没有任何内容的listnode
。
或者,如果你真的想在next
中使用polynomial
指针,并且想要一种方法来复制现有元素而不需要指针,那么只需创建一个setter函数:
void polynomial::set( const string& inCoeff, const string & inPower );
答案 1 :(得分:0)
我测试了以下代码,可以帮助您:
struct Polynomial {
string coefficient;
string power;
Polynomial* next;
Polynomial(const string& coeff, const string& pow) : coefficient(coeff), power(pow), next(NULL) {}
};
// linked-list of Polynomials
struct LinkedList {
Polynomial* head;
LinkedList() : head(NULL) {}
// add to end of list
void add(const string& coeff, const string& pow) {
if(head == NULL)
head = new Polynomial(coeff, pow);
else {
Polynomial* n;
for(n = head; n->next != NULL; n = n->next);
n->next = new Polynomial(coeff, pow);
}
}
// check if results are correct
void print() {
for(Polynomial* n = head; n != NULL; n = n->next)
cout << n->coefficient << " " << n->power << endl;
}
};
// somewhere in main()
LinkedList ll;
...
// read input values
ll.add(coeff1, pow1);
ll.add(coeff2, pow2);
ll.add(coeff3, pow3);
// check results
ll.print();
请注意,您的多项式结构成员不必是字符串。相反,您可以解析输入并将cofficient
存储为float
,将power
存储为int
(所有多项式指数都是整数)。