C ++, массив указателей, указывающих на записи в двусвязном списке - PullRequest
0 голосов
/ 30 октября 2018

В настоящее время у меня есть связанный список, который был создан, и мне нужен массив указателей на каждый элемент списка, чтобы его можно было сортировать и манипулировать им.

using namespace std;

struct Node {
 float tries;
 float vals;
 Node* next;
 Node* prev;
};

class doList {
 public:
  doList(float attempts[], float values[], int numElements) {

    Node* current;
    current = new Node;
    current->tries = attempts[0];
    current->vals = values[0];
    current->prev = NULL;
    head = current;
    tail = current;

    for (int d = 1; d < numElements; d++) {
      current = new Node;
      current->tries = attempts[d];
      current->vals = values[d];
      current->prev = tail;
      tail->next = current;
      tail = current;
      if (d == (numElements - 1)) {
        tail->next = NULL;
      }
    }
    arrayPointers = new Node*[numElements];

  }

  private:
    Node* head;
    Node* tail;
    Node** arrayPointers;
  };

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

EDIT Извините, я не достаточно ясно. Я запутался в том, как использовать массив указателей на связанный список. Мне нужна помощь, чтобы выяснить, как хранить узлы в массиве указателей. По сути, мне нужно иметь массив, где элементы в массиве указывают на записи в списке.

1 Ответ

0 голосов
/ 30 октября 2018

Вы хотите создать массив заранее и сохранить указатель на каждый элемент во время создания.

doList(float attempts[], float values[], int numElements) {

    arrayPointers = new Node*[numElements];
    Node* current;
    current = new Node;
    current->tries = attempts[0];
    current->vals = values[0];
    current->prev = NULL;
    head = current;
    tail = current;
    arrayPointers[0] = current;

    for (int d = 1; d < numElements; d++) 
    {
      current = new Node;
      current->tries = attempts[d];
      current->vals = values[d];
      current->prev = tail;
      tail->next = current;
      tail = current;
      arraypointers[d] = current;
      if (d == (numElements - 1)) 
      {
        tail->next = NULL;
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...