2016-09-21 1 views
2

Тип определения списка находится в связанномList.h, как обычно.Связанный список в C с узлом заголовка

#ifndef LINKEDLIST_H 
#define LINKEDLIST_H 

typedef struct snode { 
     int value; 
     struct snode *next; 
} snodeType; 

typedef struct hnode {int count; 
     snodeType *first; 
     snodeType *last; 
} sList; 

sList* create_sList(void); 
int insert_element_s(sList *L, snodeType *p, int value); 
int delete_element_s(sList *L, snodeType *p); 
sList* merge_lists(sList *L1, sList *L2); 

#endif /* LINKEDLIST_H */ 

Вопрос:

SLIST * create_sList (аннулируются) создает список и возвращает его к абоненту. Он должен выделить память для узла заголовка, инициализировать поля в структуре hnode.

sList* create_sList(void) { 

    sList *list = NULL; 
    list->first = (sList*)malloc(sizeof(snodeType)); 
    list->last = (sList*)malloc(sizeof(snodeType)); 

/* 2nd option 
    sList *list = NULL; 
    node = malloc(sizeof(snodeType)); 
    node->next= NULL; 
    list->first = node; 
    list->last = node; 
*/ 

    return list; 
} 

Мне нужно просто начать этот связанный список, есть кто-то, кто знает, как это сделать?

+0

Что вы понимаете, инициировав список? –

+2

'sList * create_sList (void) {sList * list = malloc (sizeof (* list)); list-> count = 0; list-> last = list-> first = NULL; возвратный лист; } ' – BLUEPIXY

ответ

1

Это должно быть просто:

sList * create_sList(void) 
{ 
    sList *list = malloc(sizof *list); 
    if(list != NULL) 
    { 
    list->count = 0; 
    list->first = list->last = NULL; 
    } 
    return list; 
} 

Это возвращает список головы без элементов, то есть пустой заголовок списка.

+0

@ Garf365 Спасибо, не видел этого из-за отступа. Исправлена. – unwind

0

Чтобы «запустить» (создать) связанный список следует выделить указатель головы, делая

sList* create_sList(void) { 
    sList *list = NULL; 
    if ((list = malloc(sizeof(sList))) == NULL) // always check your mallocs 
    return (NULL); 
    if ((list->first = malloc(sizeof(snodeType))) == NULL) 
    return (NULL); 
    bzero(list->first, sizeof(snodeType)); 
    list->last = list->first; 
    return (list); 
} 

затем использовать int insert_element_s(sList *L, snodeType *p, int value);, * р является либо последний или первый элемент списка * L является список и значение является значением. :)

+1

Зачем выделять память для первого узла? Это пустой список, поэтому 'list-> first' и' list-> last' должны быть равны 'NULL', а' list-> count' должен быть равен нулю – Garf365

+0

Не понимал, что вам нужен пустой список извините :) –