Я просмотрел другие вопросы, но никто из них не ответил на мой вопрос. Я пытаюсь создать отдельно связанный список, который добавляет из хвоста для назначения класса.Добавление в хвост связанного списка в C
/** List node **/
typedef struct node_type
{
struct node_type *next; /* Pointer to next node */
void *objPtr; /* Pointer to associated object */
} node_t;
/** List structure **/
typedef struct list_type
{
node_t *head; /* Pointer to front of list */
node_t *tail; /* Pointer to end of list */
} list_t;
list_t *newList() {
list_t *list;
list = (list_t *)malloc(sizeof(list_t));
list -> head = NULL;
list -> tail = NULL;
return(list);
}
Это были предоставленные мне конструкции. Моя функция для добавления, как это:
/** l_add -- add an object to the linked list **/
void l_add(list_t *list, void *objPtr) {
node_t *newNode;
newNode = (node_t *)malloc(sizeof(node_t));
newNode -> objPtr = objPtr;
newNode -> next = NULL;
if ((list -> head == NULL) && (list -> tail == NULL)) {
list -> head = newNode;
list -> tail = newNode;
} else {
list -> tail -> next = newNode;
list -> tail = newNode;
}
}
и мои связанные итераторы функции, как это:
iterator_t *newIterator(list_t *list) {
iterator_t *itr;
itr = (iterator_t *)malloc(sizeof(iterator_t));
itr -> list = list;
itr -> position = list -> head;
return(itr);
}
void *l_next(iterator_t *iter) {
void *object;
if ((iter -> position) == NULL) {
return NULL;
exit(0);
} else {
object = iter -> position -> next;
iter -> position = iter -> position -> next;
}
return object;
}
void l_begin(iterator_t *iter) {
iter -> position = iter -> list -> head;
}
Это не дает мне никаких ошибок, когда я скомпилировать его, я получаю большие значения что я предполагаю, это память вместо данных, которые я должен получать. Первое значение, которое я передаю, это «5», и число, первое в списке, колеблется, но находится в миллионах. Я все еще пытаюсь привыкнуть к указателям, кто-нибудь знает, почему я добавляю адрес, а не значение?
код, где я использую его:
size = sizeof(data)/sizeof(int);
for(index = 0; index < size; index++) {
l_add(list1, &data[index]);
}
l_begin(iter1);
ptr1 = l_next(iter1);
fprintf(stdout, "First value=%d\n", *ptr1);
И песни1 это:
int data[] = {5, 10, 15, 20, 25};
list_t *list1;
list1 = newList();
* Обновленный, чтобы включать функции печати и мой итератор. Я не думал, что проблема была там, но может быть. Извините за такой длинный вопрос, я попытался его отредактировать, поэтому есть не так много кода, поэтому, надеюсь, все имеет смысл, и я не испортил то, что пытался показать.
Все вы, ребята, получили это примерно в то же время, спасибо за помощь!
Можете ли вы показать нам код, в котором вы его используете? – Nate
@tbert Обратите внимание, что [тег домашней работы теперь выведен из строя и больше не должен использоваться] (http://meta.stackexchange.com/q/147100). – Gilles