Я использовал malloc, чтобы выделить новые узлы в списке, но я столкнулся с ошибкой с определенной частью моего кода; следующее решение относится только к стиранию и вставивИспользование malloc для создания связанного списка
#include <stdio.h>
#include <malloc.h>
struct Node{
int value;
struct Node * Next;
struct Node * Previous;
};
typedef struct Node Node;
struct List{
int Count;
int Total;
Node * First;
Node * Last;
};
typedef struct List List;
List Create();
void Add(List a,int value);
void Remove(List a,Node * b);
List Create()
{
List a;
a.Count=0;
return a;
}
void Add(List a,int value)
{
Node * b = (Node *)malloc(sizeof(Node));
if(b==NULL)
printf("Memory allocation error \n");
b->value=value;
if(a.Count==0)
{
b->Next=NULL;
b->Previous=NULL;
a.First=b;
}
else
{
b->Next=NULL;
b->Previous=a.Last;
a.Last->Next=b;
}
++a.Count;
a.Total+=value;
a.Last=b;
}
void Remove(List a,Node * b)
{
if(a.Count>1)
{
if(a.Last==b)
{
b->Previous->Next=NULL;
}
else
{
b->Previous->Next=b->Next;
b->Next->Previous=b->Previous;
}
}
free(b);
}
в функции удаления, в последнем еще состоянии, я не уверен, является ли или не использовать b-> Далее-> Предыдущее в порядке, и будет работать; при использовании оператора ->, я обращаюсь к указателю узла или его значению?
Большое спасибо. Я установил счетчики и общую сумму, как это требуется в моем коде. Дополнительный вопрос: если я хочу использовать list.remove (node *) вместо remove (list, node *), как это можно сделать? (поскольку список не является классом, в котором я могу применять функции). – user3005945
как я могу преобразовать функцию для работы как List.Remove (node) вместо этого, если Remove (List, node)? – user3005945
Первый переход с C на C++ - использование вами 'malloc()', 'free()' и 'typedef struct Node Node' заставило меня распознать ваш образец кода как C. – sverkerw