예제 #1
0
ptr_t DeleteListNode_HT(data_t *Master2Mem, data_t *Master2SysAlloc, ptr_t hdPtr, int key){
	data_t *myHeap = Master2Mem;
	ptr_t currentPtr = hdPtr;
	int currentKey = list_node_read_data(myHeap, currentPtr);
	ptr_t nextPtr, savePtr;
	int flag_search = 0;
	
	// search
	while(currentKey != key && currentPtr != NULL_PTR){
		flag_search = 1;
		nextPtr = list_node_get_next_pointer(myHeap, currentPtr);
		
		savePtr = currentPtr;
		currentPtr = nextPtr;
		currentKey = list_node_read_data(myHeap, currentPtr);
	}
	
	// delete	
	if(flag_search == 0){
		nextPtr = list_node_get_next_pointer(myHeap, currentPtr);
		hdPtr = nextPtr;
		list_node_delete(Master2SysAlloc, currentPtr);		
	}else{
		nextPtr = list_node_get_next_pointer(myHeap, currentPtr);	
		list_node_set_next(myHeap, savePtr, nextPtr);
		list_node_delete(Master2SysAlloc, currentPtr);
		hdPtr = hdPtr;
	}
	
	return hdPtr;		
}
예제 #2
0
/** Remove data from list.
 *
 * Removes the given node from a list and destroys it. Any data the node might
 * have is ignored. If asserts are on, we check wheter node is really present
 * in the list the caller is requesting us to remove it from.
 *
 * @param list	Linked list.
 * @param node	List node to remove.
 */
void list_remove(list_t *list, list_node_t *node)
{
	/* Check whether node is in the list as claimed. */
	assert(list_node_present(list, node));
	list_node_unlink(node);
	node->data = NULL;
	list_node_delete(node);
}
예제 #3
0
ptr_t DeleteListNode(data_t *Master2Mem, data_t *Master2SysAlloc, ptr_t hdPtr){
	ptr_t nowPtr, nextPtr;
		
	nowPtr = hdPtr;
	hdPtr = list_node_get_next_pointer(Master2Mem, nowPtr);
	list_node_delete(Master2SysAlloc, nowPtr);	
	
	return hdPtr;
}
예제 #4
0
파일: listfunc.c 프로젝트: Hilx/SynADT
/* Delete the list */
ptr_t DeleteList(data_t *Master2Mem, data_t *Master2SysAlloc, ptr_t hdPtr){
	ptr_t nowPtr;
	next_t offset;
	
	while(hdPtr != NULL_PTR){
		nowPtr = hdPtr;		

		offset = list_node_read_next(Master2Mem, hdPtr);
		hdPtr = nowPtr + offset;

		list_node_delete(Master2SysAlloc, nowPtr);
	}
	
	return hdPtr+1;
}