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
|
# 2. Ö§³ÖGDB
|
||||||
set(CMAKE_BUILD_TYPE "Debug")
|
set(CMAKE_BUILD_TYPE "Debug")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
|
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g --std=c99")
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
|
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall --std=c99")
|
||||||
|
|
||||||
# install
|
# install
|
||||||
set(CMAKE_INSTALL_PREFIX "release")
|
set(CMAKE_INSTALL_PREFIX "release")
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
基于C语言实现的通用C库。包含常用数据结构和算法
|
基于C语言实现的通用C库。包含常用数据结构和算法
|
||||||
|
|
||||||
|
> 标准:--std=c99
|
||||||
|
|
||||||
## 数据结构
|
## 数据结构
|
||||||
|数据结构 | 原理 |说明 |
|
|数据结构 | 原理 |说明 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
@ -54,7 +54,11 @@ struct _deque
|
|||||||
void (*print)(struct _deque* self);
|
void (*print)(struct _deque* self);
|
||||||
void (*print_obj)(void* obj);
|
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
|
#endif
|
||||||
|
@ -84,8 +84,12 @@ struct _queue
|
|||||||
void (*print)(struct _queue* self);
|
void (*print)(struct _queue* self);
|
||||||
void (*print_obj)(void* obj);
|
void (*print_obj)(void* obj);
|
||||||
};
|
};
|
||||||
|
typedef struct _queue* queue_t;
|
||||||
|
|
||||||
bool queue_init(struct _queue * queue, uint32_t obj_size);
|
bool queue_init(struct _queue * queue, uint32_t obj_size);
|
||||||
bool queue2_init(struct _queue * queue, uint32_t obj_size, uint32_t capacity);
|
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_
|
#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
|
// attribute
|
||||||
deque->_obj_size = obj_size;
|
self->_obj_size = obj_size;
|
||||||
deque->_size = 0;
|
self->_size = 0;
|
||||||
// deque->_capacity = 64;
|
// self->_capacity = 64;
|
||||||
// deque->_ratio = 2;
|
// self->_ratio = 2;
|
||||||
|
|
||||||
// function
|
// function
|
||||||
deque->back = deque_back;
|
self->back = deque_back;
|
||||||
deque->clear = deque_clear;
|
self->clear = deque_clear;
|
||||||
deque->destory = deque_destory;
|
self->destory = deque_destory;
|
||||||
deque->empty = deque_empty;
|
self->empty = deque_empty;
|
||||||
deque->erase = deque_erase;
|
self->erase = deque_erase;
|
||||||
deque->front = deque_front;
|
self->front = deque_front;
|
||||||
deque->get = deque_get;
|
self->get = deque_get;
|
||||||
deque->index = deque_index;
|
self->index = deque_index;
|
||||||
deque->insert = deque_insert;
|
self->insert = deque_insert;
|
||||||
deque->pop_back = deque_pop_back;
|
self->pop_back = deque_pop_back;
|
||||||
deque->pop_front = deque_pop_front;
|
self->pop_front = deque_pop_front;
|
||||||
deque->push_back = deque_push_back;
|
self->push_back = deque_push_back;
|
||||||
deque->push_front = deque_push_front;
|
self->push_front = deque_push_front;
|
||||||
deque->print = deque_print;
|
self->print = deque_print;
|
||||||
deque->remove = deque_remove;
|
self->remove = deque_remove;
|
||||||
deque->set = deque_set;
|
self->set = deque_set;
|
||||||
deque->size = deque_size;
|
self->size = deque_size;
|
||||||
|
|
||||||
deque->_head = (struct _deque_node*)malloc(sizeof(struct _deque_node));
|
self->_head = (struct _deque_node*)malloc(sizeof(struct _deque_node));
|
||||||
if (deque->_head == NULL)
|
if (self->_head == NULL)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
deque->_head->obj = NULL;
|
self->_head->obj = NULL;
|
||||||
deque->_head->prev = NULL;
|
self->_head->prev = NULL;
|
||||||
deque->_head->next = NULL;
|
self->_head->next = NULL;
|
||||||
|
|
||||||
return true;
|
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;
|
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_front = 0;
|
||||||
queue->_index_back = 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)
|
if(stack)
|
||||||
{
|
{
|
||||||
|
stack->destory(stack);
|
||||||
free(stack);
|
free(stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,9 @@ int main()
|
|||||||
printf("----- unicstl test -----\n");
|
printf("----- unicstl test -----\n");
|
||||||
// while (1)
|
// while (1)
|
||||||
{
|
{
|
||||||
list_test();
|
// list_test();
|
||||||
// test_stack();
|
// test_stack();
|
||||||
// deque_test();
|
deque_test();
|
||||||
// queue_test();
|
// queue_test();
|
||||||
|
|
||||||
// tree_test();
|
// tree_test();
|
||||||
|
@ -262,8 +262,12 @@ static void test_list_struct(void)
|
|||||||
list.print_obj(&temp); printf("\n");
|
list.print_obj(&temp); printf("\n");
|
||||||
|
|
||||||
index = -10;
|
index = -10;
|
||||||
temp.id = 97;
|
//temp.id = 97;
|
||||||
sprintf(temp.name, "robot_%02d", temp.id);
|
//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);
|
list.set(&list, index, &temp);
|
||||||
printf("list[%4d] = ", index);
|
printf("list[%4d] = ", index);
|
||||||
list.print_obj(&temp); printf("\n");
|
list.print_obj(&temp); printf("\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user