Я пытаюсь реализовать список с двойной связью в C, мои данные представляют собой структуру с предыдущим / следующим указателем и массивами 1float / 2 char,
Итак, я предполагаю создать список, который мне нужен для определения / создания структуры заголовка, что я и делаю в основном. К сожалению, я не могу добавить элемент списка с моей функцией "AddNode", и я на 90% уверен, что проблема в заголовке ...
Заранее благодарим вас за вашу помощь!
Здесь основная функция, в которой я пытаюсь объявить заголовок
int main()
{
int abfrage;
struct header* h;
h->cnt = 0;
h->first = NULL;
h->last = NULL;
do{
printf("Aktion eingeben: 1- AddNode 2-AddnodeafterVal 3-removeLastNode 4-removeNodeAfterVal 5-resetList 6-Stop\n");
scanf("%d", &abfrage);
if(abfrage==1) //addNode
{
struct node* newNode = createNode(); //Daten eingeben und Node erstellen
struct node* addedNode = addNode(h, newNode); //Node wird zur liste hinzugefügt
if(!addedNode) printf("Error!");
}
Здесь структура заголовка и узла
struct node
{
struct node* prev;
char name[40];
float price;
char material[20];
struct node*next;
};
struct header
{
struct node * first;
int cnt;
struct node * last;
};
Здесь функции Функция ввода данных просто получает входные данные, создает узел ... -> addNode должен добавить элемент в список, я думаю, проблема может быть здесь:
struct node * enterData(float price, char name[], char material []) //funktion um node zu erstellen, NOCH NICHT VERBUNDEN
{
struct node * newNode = (struct node*) calloc (1,sizeof(struct node)); //neuer Speicher vom typ NODE allokieren, enth�lt 2 pointer und struct piece
if(newNode!=NULL) //wenn newNode erstellt wurde
{
newNode->price=price; //piece einf�gen in NODE
strcpy(newNode->material, material);
strcpy(newNode->name, name);
return newNode; //newNode zur�ckgeben
}else{
return NULL; //wenn Node NULL ist wieder rausgehen, FEHLER
}
};
struct node * addNode (struct header* h, struct node * newNode)
{
if(h->cnt == 0)//wenn noch kein element da ist
{
h->first = newNode;
h->last = newNode;
h->cnt++;
newNode->next=NULL;
newNode->prev=NULL;
}else
{
h->last->next=newNode; //hier wird "next" Pointer vom alten "last" auf das neue Element gesetzt
//man muss �ber h->last->next damit man element anf�gen kann
h->last=newNode;//hier wird neues "last" definiert
h->cnt++; //header count erhöhen für jedes neu erstellte element
newNode->prev=h->last;
newNode->next=NULL;
}
return newNode;
};
struct node * createNode()
{
char tempname[40];
float tempprice;
char tempmaterial[20];
//---- Daten Abfrage
printf("\nBitte Preis eingeben:");
scanf("%f", &tempprice);
printf("\nBitte Name eingeben:");
scanf("%s", tempname);
printf("\nBitte Material eingeben:");
scanf("%s", tempmaterial);
//---Node wird erstellt
struct node * newNode =enterData(tempprice, tempname, tempmaterial);
return newNode;
};