Add and Modified.

This commit is contained in:
Saturneric 2018-02-12 08:30:03 +08:00
parent 305f6955c9
commit 598c360c8b
2 changed files with 62 additions and 0 deletions

View File

@ -3,6 +3,9 @@
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#ifndef LIST_H
#define LIST_H
typedef struct Node{ typedef struct Node{
unsigned long long id; unsigned long long id;
void *value; void *value;
@ -12,6 +15,7 @@ typedef struct Node{
struct Node *last; struct Node *last;
}Node; }Node;
typedef struct List{ typedef struct List{
Node *head; Node *head;
Node *tail; Node *tail;
@ -40,6 +44,7 @@ unsigned long long len(List *p_list);
Node *findById(List *p_list, const unsigned long long id); Node *findById(List *p_list, const unsigned long long id);
Node *findByValue(List *p_list, const char *type, const void *value); Node *findByValue(List *p_list, const char *type, const void *value);
List *mply_findByValue(List *p_list, const char *type, const void *value);
int releaseList(List *p_list); int releaseList(List *p_list);
int releaseNode(Node *p_node); int releaseNode(Node *p_node);
@ -322,8 +327,51 @@ Node *findByValue(List *p_list, const char *type, const void *value){
return NULL; return NULL;
} }
List *mply_findByValue(List *p_list, const char *type, const void *value){
List *f_list = init_list();
Node *p_node = p_list->head;
while(p_node != NULL){
if(strcmp(p_node->type,type)) continue;
if(!strcmp(type,"int")){
if(*((int *)p_node->value) == *((int *)value)){
Node *f_node = init_node();
init_value(f_node,"pointer",(void *)p_node);
insertInTail(f_list,f_node);
}
}
else if(!strcmp(type,"double")){
if(*((double *)p_node->value) == *((double *)value)){
Node *f_node = init_node();
init_value(f_node,"pointer",(void *)p_node);
insertInTail(f_list,f_node);
}
}
else if(!strcmp (type,"string")){
if(!strcmp((char *)p_node->value,(char *)value))
{
Node *f_node = init_node();
init_value(f_node,"pointer",(void *)p_node);
insertInTail(f_list,f_node);
}
}
else if(!strcmp(type,"pointer")){
if(p_node->value == value){
Node *f_node = init_node();
init_value(f_node,"pointer",(void *)p_node);
insertInTail(f_list,f_node);
}
}
p_node = p_node->next;
}
return f_list;
}
int isListEmpty(List *p_list){ int isListEmpty(List *p_list){
if(p_list->head == NULL || p_list->tail == NULL)// If its head or tail is NULL,it would be thought as empty. if(p_list->head == NULL || p_list->tail == NULL)// If its head or tail is NULL,it would be thought as empty.
return 1; // But we should ensure that both of them are NULL when we return 1; // But we should ensure that both of them are NULL when we
return 0; // want to make a list empty. return 0; // want to make a list empty.
} }
#endif

14
list/list_easy.h Normal file
View File

@ -0,0 +1,14 @@
#include "list.h"
#ifndef LIST_EASY_H
#define LIST_EASY_H
Node *new_nodeWithInt(int);
Node *new_nodeWithFloat(int);
Node *new_nodeWithString(int);
Node *new_nodeWithPointer(void *);
Node *find_nodeByInt(int);
Node *find_nodesByInt(int);
int list_through(List *p_list,void *p_func(void *));//Go through the list.Call p_func every time.
#endif