Вы можете улучшить эти вещи:
- Всегда инициализируйте указатель с помощью
NULL
.Это защитит вас от указателя, указывающего на неверный адрес. - Не указывайте значение размера массива жестко.Рассчитайте его.
- В условии
if
вы использовали присвоение =
.Измените это на проверку равенства ==
.Если вы этого не сделаете, ваша программа будет сбой .
, только спросив об этих двух строках и почему они не работают
Это потому, что temp->next
указывает на область памяти типа struct node
.Вы не можете присвоить ему целочисленное значение (как вы это делали).Я воспроизвел ваш полный код ниже некоторых ваших комментариев:
#include<stdio.h>
#include<stdlib.h>
struct Node {
int data;
struct Node *next;
struct Node *previous;
};
struct Node *create_dll_from_array(int array[], int x) {
int i;
// struct Node *newNode, *temp, *head;
struct Node *newNode= NULL, *temp=NULL, *head=NULL;
for (i=0; i<x; i++) {
newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = *(array+i);
// if (i=0) { Its wrong
if (i==0) {
head = newNode;
temp = newNode;
newNode->next = NULL;
newNode->previous = NULL;
}
else {
// temp->next = (struct Node*) newNode->data; // issue
temp->next = (struct Node*) newNode;
newNode->next = NULL;
// newNode->previous = (struct Node*) temp->data; //issue
newNode->previous = (struct Node*) temp; //issue
temp = newNode;
}
}
return head;
}
int main(){
// int array[5] = {11,2,7,22,4};
int array[] = {11,2,7,22,4};
struct Node* head;
// head = create_dll_from_array(array,5);
head = create_dll_from_array(array,sizeof(array)/sizeof(*array));
return 0;
}
Еще несколько способов оптимизации, которые вы можете сделать, это то, что внутри вашей функции create_dll
условие if
выполняется только в первый раз.,Вы можете переместить это в else
состояние и сделать ваше else
условие вашим if
состоянием