2014-02-13 1 views
1

Я пытаюсь создать простой связанный список из целочисленного вектора. Почему это не работает? Ошибки я получаю:Ошибка в коде простого связанного списка

'=' : incompatible types - from 'talstrul *' to 'node *' 
'=' : cannot convert from 'talstrul*' to talstrul' 

Это .h файл:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct 
{ 
    int num; 
    struct node *next; 


} talstrul; 

Это файл .c:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include "clabb2head.h" 

int main() 
{ int vek[5] = {1,2,3,4,5}; 

    int langd = sizeof(vek)/sizeof(vek[0]); 

    printf("%d",langd); 

    talstrul *temp = malloc(sizeof(talstrul)); 
    talstrul *pek1 = NULL; 
    int i; 
    for(i=0; i<langd; i++) 
    { 

    pek1 -> num = vek[i]; 
    pek1 -> next = *temp; 
    *temp = pek1; 
    } 
} 
+0

1) Где определяется 'struct node'? 2) Почему вы ожидаете, что сможете присвоить '* temp' типа' talstrul' 'pek1-> next' типа' struct node * '? Их больше, но начнем. – jerry

+0

Вам нужно изменить 'typedef struct {' to 'typedef struct node {'. Есть и другие ошибки, как указывают люди. –

ответ

4

temp имеет тип talstrul *

talstrul *temp = malloc(sizeof(talstrul)); 

Вы являетесь t участвовав назначить следующий, который имеет тип node *

struct node *next; 

Далее

pek1 -> next = *temp; 

разыменовывает temp, получая talstrul. Вы не должны разыменовывать указатель.

Компилятор дает вам довольно хорошее объяснение того, что происходит не так.

0

Другая проблема с кодом:

pek1 присваивается NULL. Однако вы пытаетесь назначить pek1-> num и pek1-> next. Сначала вы должны сделать выделение памяти для pek1.

0
typedef struct node { 
    int num; 
    struct node *next; 
} talstrul; 
... 
int vek[5] = {1,2,3,4,5}; 

int langd = sizeof(vek)/sizeof(vek[0]); 

talstrul *pek1 = NULL; 
int i; 
for(i=0; i<langd; i++){ 
    talstrul *temp = malloc(sizeof(talstrul)); 

    temp -> num = vek[i]; 
    temp -> next = pek1; 
    pek1 = temp; 
} 
Смежные вопросы