Структура заголовка в двусвязном списке не работает, возможно, неправильно работает функция addNode? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь реализовать список с двойной связью в 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;
};
...