将值存储在链接列表中的结构中

时间:2013-02-14 22:19:41

标签: c++ list parsing pointers

我想知道如何将值存储到结构中,该结构是结构链表的一部分。我有:

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; 

};

2 个答案:

答案 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(所有多项式指数都是整数)。