2013-02-14 2 views
0

Мне интересно, как я буду хранить значение в структуре, которая является частью связанного списка структур. У меня есть:Сохранение значений в структуре в связанном списке

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() я хочу прочитать строку, используя строку, преобразовать ее в массив символов, чтобы разбить значения, а затем сохранить это значение в polyomial.coefficient и polyomial.power для каждого узла в связанном списке ,

Или я искал некоторую информацию и думал, что могу ввести два значения int, а затем использовать stringstream для преобразования их в строки и их сохранение в коэффициент и мощность.

В любом случае, можете ли вы помочь мне представить концепцию хранения значения в связанной структуре?

EDIT: Я добавил перегруженный конструктор:

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 и вы хотите способ копирования поверх существующего элемент без удаления содержимого диска указателя, просто сделать сеттер функцию:

void polynomial::set(const string& inCoeff, const string & inPower); 
+0

Имеет смысл! :) –

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 (Все полиномиальные показатели являются целыми числами).

Смежные вопросы