Ejemplo n.º 1
0
Archivo: list.c Proyecto: yrko1/ee209
/* remove (*node_p) from (*list_p) */
void remove_List (List* list_p, Node* node_p) {
	Node *p;
	if (!(*list_p -> head -> key > *node_p -> key) || (*list_p -> tail -> key < *node_p -> key)){
 		p = search_List(list_p, *node_p -> key);
		if (p && p -> key == node_p -> key){
			if ((p -> key == list_p -> head -> key) || (p -> key == list_p -> tail -> key) || p -> key == list_p -> mid -> key){
				if (p -> key == list_p -> head -> key){
					list_p -> head = list_p -> head -> next;
					p -> next -> prev = NULL;
				}
				if (p -> key == list_p -> tail -> key){
					list_p -> tail = list_p -> tail -> prev;
					p -> prev -> next = NULL;
				}
			}
			else{
				p -> prev -> next = p -> next;
				p -> next -> prev = p -> prev;
				free(p -> key);
				free(p);
			}
			list_p -> len --;
			/*if (list_p -> len % 2 == 1){
				if (*list_p -> mid -> key > *node_p -> key)
					list_p -> mid = list_p -> mid -> next;
			}
			if (list_p -> len % 2 == 0){
				if (*list_p -> mid -> key < *node_p -> key)
					list_p -> mid = list_p -> mid -> prev;
			}*/
		}
	}
}
Ejemplo n.º 2
0
Archivo: list.c Proyecto: yrko1/ee209
/* returns node which has keyval */
Node *getNode_List (List *list_p, int keyval)
{
	Node *p;
	if ( list_p -> head != 0 && list_p -> tail != 0){
		if (!((*list_p -> head -> key > keyval) || (*list_p -> tail -> key < keyval))){
			if (*list_p -> head -> key == keyval || *list_p -> tail -> key == keyval){
				if (*list_p -> head -> key == keyval){
					return list_p -> head;}
				else
					return list_p -> tail;
			}
			else{
				p = search_List(list_p, keyval);
				if (keyval == *p -> key)
					return p;
				else
					if (keyval == *p -> next -> key)
						return p -> next;
					else
						return 0;
			}
		}
	}
	return 0;
}
Ejemplo n.º 3
0
Archivo: list.c Proyecto: yrko1/ee209
/* change key of (*node_p) into (keyval) */
void setKey_List (List* list_p, Node* node_p, int keyval) {
	Node *p;
	if (!(*list_p -> head -> key > *node_p -> key) || (*list_p -> tail -> key < *node_p -> key)){
		p = search_List(list_p, *node_p -> key);
		if (p -> key == node_p -> key){
			remove_List(list_p, node_p);
			*p -> key = keyval;
			insert_List(list_p, p-> key, p -> item);
		}
	}
}
Ejemplo n.º 4
0
int main()
{
	Link Head;
	Head=creat_List(Head);
	if(search_List(8, Head))
	{
		printf("searchtime= %d", searchtime);
	}
	else
		printf("NO FIND!!");
	if(Head!=NULL)
		free_List(Head);
	reuturn 0;
}
Ejemplo n.º 5
0
Archivo: list.c Proyecto: yrko1/ee209
/* create and insert a node having (*key_p) and (*item_p) to (*list_p) */
void insert_List (List* list_p, int* key_p, void* item_p) {
	Node *node;
	Node *p;
	if (list_p -> len == 0){
		node = new_Node(NULL,NULL,key_p,item_p);
		list_p -> head = node;
		list_p -> tail = node;
		list_p -> mid = node;
	}
	else{
		if ((*list_p -> head -> key > *key_p) || (*list_p -> tail -> key < *key_p)){
			if (*list_p -> head -> key > *key_p){
				node = new_Node(NULL, list_p -> head, key_p, item_p);
				list_p -> head -> prev = node;
				list_p -> head = node;
			}
			else{
				node = new_Node(list_p -> tail, NULL, key_p, item_p);
				list_p -> tail -> next = node;
				list_p -> tail = node;
			}
		}
		else{
			if (!(*list_p -> mid -> key < *key_p && *list_p -> mid -> next -> key > *key_p)){
				p = search_List(list_p, *key_p);
				node = new_Node(p, p -> next, key_p, item_p);
				node -> next -> prev = node;
				node -> prev -> next = node;
			}
			else{
				node = new_Node(list_p -> mid, list_p -> mid -> next, key_p, item_p);
				node -> next -> prev = node;
				node -> prev -> next = node;
			}
		}
	}
	list_p -> len ++;
	if (list_p -> len%2 == 1){
		if (*list_p -> mid -> key < *key_p)
			list_p -> mid = list_p -> mid -> next;
	}
	else{
		if (*list_p -> mid -> key > *key_p)
			list_p -> mid = list_p -> mid -> prev;
	}
}