2012-03-11 2 views
2

Я пытался создать связанный список с structs. Идея состоит в том, чтобы использовать 2 разных столбца, один из которых является узлом, а другой - указателем на узлы (поэтому я могу связать узлы вместе).Этот указатель - C++ связанный список

Но я хотел, чтобы инициализировать указатель на первый узел, как NULL, а также создавать последующие узлы позже:

Я имеющую ошибку в 2-х методах конструктора (List и полиномиальный), я не могу использовать operator = нравится, как я. Но я не понимаю, почему.

struct List 
{ 
    //Data members to hold an array of pointers, pointing to a specific node 
    Node *list[100]; 

    //Default constructor 
    List(); 
}; 

List::List() 
{ 
    *list[0] = NULL; 
} 

class Polynomial 
{ 
    public: 
    [...] 

    private: 
     List *poly;       //Store the pointer links in an array 
     Node first_node; 
     int val; 
}; 

Polynomial::Polynomial() 
{ 
    poly = new List(); 
} 

/*******************************************************************************************************************************/ 
// Method : initialize() 
// Description : This function creates the linked nodes 
/*******************************************************************************************************************************/ 
Polynomial::void initialize(ifstream &file) 
{ 
    int y[20]; 
    double x[20]; 
    int i = 0, j = 0; 

    //Read from the file 
    file >> x[j]; 
    file >> y[j]; 

    first_node(x[j], y[j++]);      //Create the first node with coef, and pwr 
    *poly->list[i] = &first_node;      //Link to the fist node 

    //Creat a linked list 
    while(y[j] != 0) 
    { 
     file >> x[j]; 
     file >> y[j]; 
     *poly->list[++i] = new Node(x[j], y[j++]); 
    } 

    val = i+1;        //Keeps track of the number of nodes 
} 

У меня возникли ошибки в конструкторе Polynomial и конструкторе List.

+1

Почему вы не используете 'зЬй :: вектор ' вместо этого? –

+0

Какая ошибка? – hamed

+0

Это не похоже на связанный список. – delnan

ответ

2

Это не похоже на список ссылок. Может быть, вам нужна структура node (справа?) Содержат информацию и List содержат много node после? Если это два, у меня есть два решения:

первый. очень (и очень) общий.

typedef struct nNode{ 
    int info; 
    string name; 
    //and any information you want this node has. 
    struct nNode *pNext; 
} Node; 

Второй. Стиль, как я вижу в вашем коде.

typedef struct nNode{ 
    int info; 
    string name; 
    //and any information you want this node has 
}Node; 
typedef struct nList{ 
    Node node; 
    struct nList *pNext; 
} List; 

Вы видите, второй вариант выглядит как первый :)

+0

Но что я делаю неправильно в своем коде? У меня есть узел структуры, который создает узел. И struct List, который содержит указатели на все остальные узлы.Что-то не так с этой логикой? – Josh

+0

Я теперь включил в исходный код, часть, где я пытаюсь связать узлы, пожалуйста, вы можете взглянуть на это. – Josh

2

Это не совсем понятно из вашего кода, что вы хотите сделать.

Но код:

Node *list[100]; 

означает массив из 100 указателей узлов.

Когда вы делаете:

*list[0] = NULL; 

вы разыменования список [0] указатель, который не то, что вы хотите. list [0] доставит вам Node *, а * list [0] получит вам узел.

Либо вы имеете в виду:

list[0] = NULL; 

или вы хотите, чтобы создать массив Node **. Я не уверен в вашем коде, что вам нужно.

+0

Я пытаюсь получить доступ к каждому узлу через список «struct», и я хочу изменить данные или связать их вместе с другим узлом. – Josh

+0

Я хотел установить указатель на первый узел равным NULL, а значит, не указывать на ничего ... поскольку на него не следует указывать. – Josh

+0

Тогда вы хотите «list [0] = NULL;» – steve8918

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