Exemplo n.º 1
0
int dlist_insert(DList* thiz, int index, void* data)
{
	DListNode* node = NULL;
	DListNode* cursor = NULL;

	if((node = dlist_node_create(data)) == NULL)	return -1;

	if(thiz->first == NULL) {
		thiz->first = node;
		return 0;
	}

	cursor = dlist_get_node(thiz, index, 1);

	if(index < dlist_length(thiz)) {
		if(thiz->first == cursor) {
			thiz->first = node;
		} else {
			cursor->prev->next = node;
			node->prev = cursor->prev;
		}
		node->next = cursor;
		cursor->prev = node;
	} else {
		cursor->next = node;
		node->prev = cursor;
	}

	return 0;
}
Exemplo n.º 2
0
Arquivo: list.c Projeto: libin581/knet
kdlist_t* dlist_init(kdlist_t* dlist) {
    verify(dlist);
    dlist->head = dlist_node_create();
    verify(dlist->head);
    dlist->head->data = 0;
    dlist->head->next = dlist->head;
    dlist->head->prev = dlist->head;
    dlist->count      = 0;
    dlist->init       = 1;
    return dlist;
}
Exemplo n.º 3
0
Arquivo: list.c Projeto: libin581/knet
kdlist_t* dlist_create() {
    kdlist_t* dlist = create(kdlist_t);
    verify(dlist);
    dlist->head = dlist_node_create();
    verify(dlist->head);
    if (!dlist->head) {
        destroy(dlist);
        return 0;
    }
    dlist->head->data = 0;
    dlist->head->next = dlist->head;
    dlist->head->prev = dlist->head;
    dlist->count      = 0;
    dlist->init       = 0;
    return dlist;
}
Exemplo n.º 4
0
DListRet dlist_insert(DList* thiz, size_t index, void* data)
{
	DListNode* node = NULL;
	DListNode* cursor = NULL;

	if((node = dlist_node_create(data)) == NULL)
	{
		return DLIST_RET_OOM; 
	}

	if(thiz->first == NULL)//链表为空,貌似没有头节点
	{
		thiz->first = node;

		return DLIST_RET_OK;
	}

	cursor = dlist_get_node(thiz, index, 1);
	
	if(index < dlist_length(thiz))
	{
		if(thiz->first == cursor)
		{
			thiz->first = node;
		}
		else
		{
			cursor->prev->next = node;
			node->prev = cursor->prev;
		}
		node->next = cursor;
		cursor->prev = node;
	}
	else
	{
		cursor->next = node;
		node->prev = cursor;
	}

	return DLIST_RET_OK;
}