Итак, все еще пытаюсь реализовать список смежности для графа. Я должен сделать это так: вы пишете количество вершин, а затем для каждой из них вы пишете связанные с ними вершины. Например:
"Write amount of vertices:" 5
1: 2 3
2: 4 5
3: 1 4
4: 5
5: 1 3
А затем этот список сохраняется и может отображаться или преобразовываться в матрицу смежности или матрицу инцидентности.
#include <iostream>
using namespace std;
class list{
public:
list() {
Size = 0;
head = nullptr;
}
void zanos(int data);
int getSize() { return Size; }
int& operator[](const int index);
private:
class Node {
public:
Node* next;
int data;
Node(int data = 0, Node* next = nullptr) {
this->data = data;
this->next = next;
}
};
int Size;
Node *head;
};
int main() {
list st1;
st1.zanos(5);
st1.zanos(6);
st1.zanos(10);
cout << st1.getSize() << endl;
cout << st1[1];
}
void list::zanos(int data)
{
if (head == nullptr) {
head = new Node;
}
else {
Node* current = this->head;
while (current->next != nullptr)
current = current->next;
}
Size++;
}
int& list::operator[](const int index)
{
int counter = 0;
Node* current1 = this->head;
while (current1 != nullptr) {
if (counter == index) {
return current1->data;
}
current1 = current1->next;
counter++;
}
}
прямо сейчас получил такой код, где я пытаюсь составить список смежности через односвязный список, который я пытаюсь сделать (потому что это Dynami c, и я не знаю другого способа, как ввести неизвестное количество вершин, которые будут сохранены и могут быть доступны с помощью индекса. для индекса я пытаюсь перегрузить operator [], но получаю ошибку: Возникло исключение: нарушение прав чтения. ** list :: operator [] ** (...) вернул 0x1.