Следующий код C - мой собственный способ написания примитивного связанного списка.Он использует структуру под названием lnode.Я знаю, что это не лучший / самый эффективный способ сделать это, но моя идея заключается в следующем: создать базовый узел, использовать указатель «итератор», здесь q, который указывает на этот последний узел в списке, а затем добавить новый узел,
Следующий код не скомпилируется.Я не могу найти причину, но она ненавидит эту строку
struct lnode *q= malloc(sizeof(struct lnode));
Любой совет, как заставить эту идею работать?Заранее спасибо.
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
struct lnode{
int value;
struct lnode *nextnode;
};
int main(){
struct lnode *startnode = malloc(sizeof(struct lnode));
startnode->value=0;
startnode->nextnode=NULL;
struct lnode *q= malloc(sizeof(struct lnode));
int i = 0;
for(i=0;i<10;i++){
struct lnode *p = malloc(sizeof(struct lnode));
p= q->nextnode;
p->value=i;
p->nextnode=NULL;
q=p;
}
return 0;
}
Хочу отметить, что я новичок.Я использую компилятор Watcom (Почему? Мой компьютер старый и все, что мне нужно для этих практических программ) Вывод журнала:
structure1.c (17): Ошибка!E1063: Отсутствует операнд struct1.c (17):
Внимание!W111: Бессмысленное использование выражения структура1.c (17):
Ошибка!E1009: Ожидается ';'но обнаружил структуру: struct1.c (17):
Ошибка!E1011: Символ 'lnode' не был объявлен struct1.c (17):
Ошибка!E1011: Символ 'q' не был объявлен struct1.c (17):
Ошибка!E1014: левый операнд должен иметь структуру lvalue .1.c (19):
Я следовал приведенному совету и изменил код: новый код такой:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
struct lnode{
int value;
struct lnode *nextnode;
};
int main(){
struct lnode *startnode = (struct lnode *)malloc(sizeof(struct lnode));
struct lnode *q;
startnode->value=0;
startnode->nextnode=NULL;
q = malloc(sizeof(struct lnode));
doLoop(q);
return 0;
}
void doLoop(struct lnode *q){
int i = 0;
for(i=0;i<10;i++){
struct lnode *p = (struct lnode *)malloc(sizeof(struct lnode));
q->nextnode=p;
p->value=i;
p->nextnode=NULL;
printf("%i, %i\n",p->value,q->value);
q=p;
}
}
Я напечатал значения «значения» каждого узла в списке вместе с предыдущим значением.Это работает за исключением первой итерации, которая дает странный вывод.