mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-04 08:06:52 +08:00
给各数据结构添加new和free接口
This commit is contained in:
parent
004a92821c
commit
27ac581846
@ -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")
|
||||
|
@ -5,6 +5,8 @@
|
||||
|
||||
基于C语言实现的通用C库。包含常用数据结构和算法
|
||||
|
||||
> 标准:--std=c99
|
||||
|
||||
## 数据结构
|
||||
|数据结构 | 原理 |说明 |
|
||||
|---|---|---|
|
||||
|
@ -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
|
||||
|
@ -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_
|
||||
|
68
src/deque.c
68
src/deque.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
14
src/list.c
14
src/list.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
14
src/queue.c
14
src/queue.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -304,6 +304,7 @@ void stack_free(stack_t stack)
|
||||
{
|
||||
if(stack)
|
||||
{
|
||||
stack->destory(stack);
|
||||
free(stack);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user