dodawanie elementu do listy dwukierunkowej

0
struct pojemnik
{
    int liczba;
    struct pojemnik *nast;
    struct pojemnik *poprz;
};

typedef struct pojemnik poj;


void neww(poj **nowy)
{
    poj *next=NULL;
    next=malloc(sizeof(poj));
      if (*nowy==NULL)
    {
        *nowy=next;
        next->poprz=next;
        next->nast=next;
    }else
    {

    nowy->nast=next;
    next->nast=nowy->nast;
    next->poprz=nowy->nast->poprz;
    }
}

i kompilator mówi mi że 'nast' nie jest strukturą to rozumiem bo jest wsk na strukture tylko nie wiem teraz jak to poprawnie napisać... z góry dzięki za pomoc :)

1

Namieszałeś sobie niewłaściwymi nazwami.

void neww(poj **head)
  {
   poj *add=malloc(sizeof(poj));
   if(*head) (*head)->poprz=(*head)->nast=add;
   else
     { 
      add->poprz=(*head);
      add->nast=(*head)->nast;
      add->nast->poprz=add;
      (*head)->nast=add;
     }
  }
0
#include <stdio.h>
#include <stdlib.h>


struct el {
    int klucz;
    struct el *nast;
    struct el *poprz;
};

typedef struct el elListy;
typedef elListy *lista;

void neww(elListy **head)
  {
    int buff;
    printf("wpisz el do listy  :\n");
    scanf("%d",&buff);
    elListy *add=malloc(sizeof(elListy));
    add->klucz=buff;

    if(*head) (*head)->poprz=(*head)->nast=add;
    else
    {
        add->poprz=(*head);
        add->nast=(*head)->nast;
        add->nast->poprz=add;
        (*head)->nast=add;
    }
}

int main()
{
    lista glowa=malloc(sizeof(elListy));
    printf("wpisz el d listy");
    scanf("%d",&glowa->klucz);
    glowa->nast=glowa->poprz=NULL;
    neww(&glowa);
    neww(&glowa);
    printf("glowa->klucz : %d \nglowa->nast->klucz : %d\nglowa->nast->nast->klucz : %d",glowa->klucz,glowa->nast->klucz,glowa->nast->nast->klucz);

}
 

nie moge znaleźć błędu, generalnie wypisuje jakiś adres chyba przy glowa->nast->nast->klucz jesli można to prosze o jakąś wskazówkę co może nie działać

0

To się zdecyduj normalna lista czy cykliczna.
To co było poprzednio wyglądało na początek listy cyklicznej.

#include <stdio.h>
#include <stdlib.h>
 
 
struct el {
    int klucz;
    struct el *nast;
    struct el *poprz;
};
 
typedef struct el elListy;
typedef elListy *lista;
 
void neww(elListy **head)
  {
   int buff;
   printf("wpisz el do listy  :\n");
   scanf("%d",&buff);
   elListy *add=malloc(sizeof(elListy));
   add->klucz=buff;
   add->poprz=NULL;
   add->nast=(*head);

   if(*head) (*head)->poprz=add;
   (*head)=add;
  }
 
int main()
  {
   lista glowa=NULL;
   neww(&glowa);
   neww(&glowa);
   neww(&glowa);
   printf
     (
      "glowa->klucz : %d \nglowa->nast->klucz : %d\nglowa->nast->nast->klucz : %d",
      glowa->klucz,glowa->nast->klucz,glowa->nast->nast->klucz
     );
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1