コード例 #1
0
void node_insert_ordered(List *list, int expire_time, int name){

	if (list->first_node->expire_time < expire_time){
		list_insert_begin(list, expire_time, name);
	}
	else if(list->first_node->expire_time > expire_time && list->first_node->next == NULL){
		node_insert_after(list->first_node, expire_time, name);
	}
	else{
		Node *node = list->first_node->next;
		Node *prev_node = list->first_node;

	 	while (node != NULL){
	 		if(node->expire_time < expire_time){
	 			node_insert_after(prev_node, expire_time, name);
	 			break;
	 		}
	 		prev_node = node; 
	 		node = node->next;

	 	}
	 	if(node == NULL){
	 		node_insert_after(prev_node, expire_time, name);
	 	}
	}
}
コード例 #2
0
int main()
{
    struct node* head = head_init();
    int i;

    for(i=0; i<5; i++)
    {
        node_add(head, i);
    }

    printf_list(head);
    node_del(head, 3);
    printf_list(head);
    node_insert_after(head,2,6);
    printf_list(head);
    node_insert_before(&head,0,5);
    printf_list(head);
    node_insert_before(&head,6,8);
    printf_list(head);
    node_reverse(&head);
    printf_list(head);
    node_reverse_by_test(&head);
    printf_list(head);
    
    struct node* p = search_mid_node(head);
    printf("mid=%d\n", p->data);
   /* delete head emlement */
    Remove_head(&head);
    printf_list(head);

    
    for(i=7; i<10; i++)
    {
        node_add(head, i);
    }	
    printf_list(head);
    p = search_mid_node(head);
    printf("mid=%d\n", p->data);
    return 0;
}
コード例 #3
0
ファイル: DSNode.c プロジェクト: hmh2palind/DSAlgorithm
/**
 * Inserts the node at index of a linked list
 */
bool node_insert_middle(Node **head, void *new_data, int index) {
	bool result = false;
	if (head && *head && index >= 0) {
		Node *temp = *head, *prev_temp = NULL;
		int i = 0;
		while (i < index && temp) {
			i++;
			prev_temp = temp;
			temp = temp->next;
		}

		//Found the index will be insert
		if (temp && i == index) {
			if (prev_temp == NULL) { // Insert at begin of linked list
				node_insert_first(head, new_data);
			} else {
				node_insert_after(prev_temp, new_data);
			}
			result = true;
		}
	}
	return result;
}
コード例 #4
0
ファイル: btree.c プロジェクト: cj19881112/btree
static void 
split_node(struct btree_s *tree, struct bnode_s *node, int child_pos)
{
	struct bnode_s *nnode = alloc_node(tree->max_key_nr, tree->max_child_nr);
	struct bnode_s *onode = node->child[child_pos];

#define COPY(dst, src, pos, len) \
	do { \
		int i; \
		for (i = 0; i < len; i++) { \
			dst[i] = src[pos+i]; \
		} \
	} while (0)

	/* 拷贝一半的节点到新的节点, 先算出要拷贝的位置与个数 */
	int key_begin_pos = tree->min_key_nr+1;
	int key_copy_nr = tree->min_key_nr;

	int child_begin_pos = LEFT_CHILD_OF_KEY(key_begin_pos);
	int child_copy_nr = key_copy_nr + 1;

	COPY(nnode->key, onode->key, key_begin_pos, key_copy_nr);
	COPY(nnode->child, onode->child, child_begin_pos, child_copy_nr);

	nnode->nkeys = tree->min_key_nr;
	nnode->leaf = onode->leaf;

	/* 向父节点插入新的节点与孩子 */
	int key = onode->key[tree->min_key_nr];
	key_insert_before(node, RIGHT_KEY_OF_CHILD(child_pos), key);
	node_insert_after(node, child_pos, nnode);
	node->nkeys++;

	/* 调整原来的节点 */
	onode->nkeys = tree->min_key_nr;
}
コード例 #5
0
void
list_insert_front (linked_list_t list, node_t node)
{
    node_insert_after (list->data, node);
    list->count++;
}