Следующий код C - это мой собственный способ записи примитивного связанного списка. Он использует структуру, называемую lnode. Я знаю, что это не лучший/самый эффективный способ сделать это, но моя идея такова: создайте базовый узел, используйте указатель «итератор», здесь q, который указывает на последний узел в списке, а затем добавьте новый узел ,C Пример LinkedList не компилирует
Следующий код не компилируется. Я не могу найти причину, но он не поддерживает эту строку.
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: Отсутствует операнд structure1.c (17):
Предупреждение! W111: Бессмысленное использование выражения structure1.c (17):
Ошибка! E1009: Ожидание ';' но найдено «struct» structure1.c (17):
Ошибка! E1011: Символ 'lnode' не был объявлен structure1.c (17):
Ошибка! E1011: Символ «q» не был объявлен. Struct1.c (17):
Ошибка! E1014: Левый операнд должен быть «именующее» structure1.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;
}
}
Я напечатал «значение "значения каждого узла в списке вместе с предыдущим значением. Он работает, кроме первой итерации, которая дает странный результат.
Что такое сообщение об ошибке, что вы получите от компилятора? – Jesper
Он компилируется для меня с GCC –
Не для любви к Иисусу отбрасывает возвращаемое значение malloc()! –