给各数据结构添加new和free接口

This commit is contained in:
建峰 2024-06-23 14:16:19 +08:00
parent 004a92821c
commit 27ac581846
10 changed files with 91 additions and 34 deletions

View File

@ -17,8 +17,8 @@ add_subdirectory(test)
# 2. Ö§³ÖGDB
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g --std=c99")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall --std=c99")
# install
set(CMAKE_INSTALL_PREFIX "release")

View File

@ -5,6 +5,8 @@
基于C语言实现的通用C库。包含常用数据结构和算法
> 标准:--std=c99
## 数据结构
|数据结构 | 原理 |说明 |
|---|---|---|

View File

@ -54,7 +54,11 @@ struct _deque
void (*print)(struct _deque* self);
void (*print_obj)(void* obj);
};
typedef struct _deque* deque_t;
bool deque_init(struct _deque* deque, uint32_t obj_size);
bool deque_init(struct _deque* self, uint32_t obj_size);
deque_t deque_new(void);
void deque_free(deque_t deque);
#endif

View File

@ -84,8 +84,12 @@ struct _queue
void (*print)(struct _queue* self);
void (*print_obj)(void* obj);
};
typedef struct _queue* queue_t;
bool queue_init(struct _queue * queue, uint32_t obj_size);
bool queue2_init(struct _queue * queue, uint32_t obj_size, uint32_t capacity);
queue_t queue_new(void);
void queue_free(queue_t queue);
#endif // _QUEUE_H_

View File

@ -294,41 +294,55 @@ void deque_print(struct _deque* self)
}
}
bool deque_init(struct _deque* deque, uint32_t obj_size)
bool deque_init(struct _deque* self, uint32_t obj_size)
{
// attribute
deque->_obj_size = obj_size;
deque->_size = 0;
// deque->_capacity = 64;
// deque->_ratio = 2;
self->_obj_size = obj_size;
self->_size = 0;
// self->_capacity = 64;
// self->_ratio = 2;
// function
deque->back = deque_back;
deque->clear = deque_clear;
deque->destory = deque_destory;
deque->empty = deque_empty;
deque->erase = deque_erase;
deque->front = deque_front;
deque->get = deque_get;
deque->index = deque_index;
deque->insert = deque_insert;
deque->pop_back = deque_pop_back;
deque->pop_front = deque_pop_front;
deque->push_back = deque_push_back;
deque->push_front = deque_push_front;
deque->print = deque_print;
deque->remove = deque_remove;
deque->set = deque_set;
deque->size = deque_size;
self->back = deque_back;
self->clear = deque_clear;
self->destory = deque_destory;
self->empty = deque_empty;
self->erase = deque_erase;
self->front = deque_front;
self->get = deque_get;
self->index = deque_index;
self->insert = deque_insert;
self->pop_back = deque_pop_back;
self->pop_front = deque_pop_front;
self->push_back = deque_push_back;
self->push_front = deque_push_front;
self->print = deque_print;
self->remove = deque_remove;
self->set = deque_set;
self->size = deque_size;
deque->_head = (struct _deque_node*)malloc(sizeof(struct _deque_node));
if (deque->_head == NULL)
self->_head = (struct _deque_node*)malloc(sizeof(struct _deque_node));
if (self->_head == NULL)
{
return false;
}
deque->_head->obj = NULL;
deque->_head->prev = NULL;
deque->_head->next = NULL;
self->_head->obj = NULL;
self->_head->prev = NULL;
self->_head->next = NULL;
return true;
}
deque_t deque_new(void)
{
return (struct _deque*)malloc(sizeof(struct _deque));
}
void deque_free(deque_t deque)
{
if(deque != NULL)
{
deque->destory(deque);
free(deque);
}
}

View File

@ -205,3 +205,17 @@ bool list_init2(struct _list* list, uint32_t obj_size, uint32_t capacity)
}
return true;
}
list_t list_new(void)
{
return (struct _list*)malloc(sizeof(struct _list));
}
void list_free(list_t list)
{
if(list != NULL)
{
list->destory(list);
free(list);
}
}

View File

@ -462,3 +462,17 @@ bool queue2_init(struct _queue * queue, uint32_t obj_size, uint32_t capacity)
queue->_index_front = 0;
queue->_index_back = 0;
}
queue_t queue_new(void)
{
return (struct queue_t *)malloc(sizeof(struct _queue));
}
void queue_free(queue_t queue)
{
if(queue != NULL)
{
queue->destory(queue);
free(queue);
}
}

View File

@ -304,6 +304,7 @@ void stack_free(stack_t stack)
{
if(stack)
{
stack->destory(stack);
free(stack);
}
}

View File

@ -27,9 +27,9 @@ int main()
printf("----- unicstl test -----\n");
// while (1)
{
list_test();
// list_test();
// test_stack();
// deque_test();
deque_test();
// queue_test();
// tree_test();

View File

@ -262,8 +262,12 @@ static void test_list_struct(void)
list.print_obj(&temp); printf("\n");
index = -10;
temp.id = 97;
sprintf(temp.name, "robot_%02d", temp.id);
//temp.id = 97;
//sprintf(temp.name, "robot_%02d", temp.id);
// temp = data[0];
// struct _student robot = {"robot", 97};
// temp = robot;
temp = (struct _student){"robot", 97};
list.set(&list, index, &temp);
printf("list[%4d] = ", index);
list.print_obj(&temp); printf("\n");