queue修改接口函数

This commit is contained in:
建峰 2025-04-23 00:18:19 +08:00
parent 1f82b7502c
commit c19a337821
6 changed files with 94 additions and 93 deletions

View File

@ -17,8 +17,7 @@ static void demo_queue_num(void)
int temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]);
queue_t queue = queue_new();
queue_init(queue, sizeof(int));
queue_t queue = queue_new(sizeof(int));
queue->print_obj = print_num;
printf("\n\n----- demo_queue_num -----\n");
@ -102,8 +101,7 @@ static void demo_queue_char(void)
char temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]) - 1;
queue_t queue = queue_new();
queue_init2(queue, sizeof(char), 10);
queue_t queue = queue_new2(sizeof(char), 10);
queue->print_obj = print_char;
printf("\n\n----- demo_queue_char -----\n");
@ -215,8 +213,7 @@ static void demo_queue_struct(void)
struct _student temp;
uint32_t len = sizeof(data) / sizeof(data[0]) - 1;
queue_t queue = queue_new();
queue_init(queue, sizeof(struct _student));
queue_t queue = queue_new(sizeof(struct _student));
queue->print_obj = print_struct;
printf("\n\n----- demo_queue_struct -----\n");

View File

@ -55,10 +55,10 @@ struct _queue
};
typedef struct _queue* queue_t;
bool queue_init(struct _queue* self, uint32_t obj_size);
bool queue_init2(struct _queue* self, uint32_t obj_size, uint32_t capacity);
// create and free queue
queue_t queue_new(uint32_t obj_size);
queue_t queue_new2( uint32_t obj_size, uint32_t capacity);
queue_t queue_new(void);
void queue_free(queue_t* queue);
#endif // _QUEUE_H_

View File

@ -154,8 +154,7 @@ static bool graph_bfs(struct _graph *self, uint32_t idx)
}
// printf("bfs start.\n");
queue_t queue = queue_new();
queue_init(queue, sizeof(uint32_t));
queue_t queue = queue_new(sizeof(uint32_t));
queue->push(queue, &idx);
while (!queue->empty(queue))

View File

@ -306,7 +306,7 @@ static void queue2_print(struct _queue* self)
}
}
bool queue_init(struct _queue * self, uint32_t obj_size)
static bool queue_init(struct _queue * self, uint32_t obj_size)
{
assert(self != NULL);
assert(obj_size > 0);
@ -344,7 +344,7 @@ bool queue_init(struct _queue * self, uint32_t obj_size)
return true;
}
bool queue_init2(struct _queue * self, uint32_t obj_size, uint32_t capacity)
static bool queue_init2(struct _queue * self, uint32_t obj_size, uint32_t capacity)
{
assert(self != NULL);
assert(obj_size > 0);
@ -401,11 +401,59 @@ done:
return false;
}
queue_t queue_new(void)
/**
* @brief
*
*
* @param obj_size
*
* @return queue_t
*/
queue_t queue_new(uint32_t obj_size)
{
return (struct _queue *)calloc(1, sizeof(struct _queue));
struct _queue * queue = NULL;
queue = (struct _queue *)calloc(1, sizeof(struct _queue));
if(queue != NULL)
{
if(queue_init(queue, obj_size) == false)
{
free(queue);
queue = NULL;
}
}
return queue;
}
/**
* @brief
*
*
* @param obj_size
* @param capacity
*
* @return queue_t
*/
queue_t queue_new2(uint32_t obj_size, uint32_t capacity)
{
struct _queue * queue = NULL;
queue = (struct _queue *)calloc(1, sizeof(struct _queue));
if(queue != NULL)
{
if(queue_init2(queue, obj_size, capacity) == false)
{
free(queue);
queue = NULL;
}
}
return queue;
}
/**
* @brief
*
* @param queue
*
*/
void queue_free(queue_t* queue)
{
assert(queue != NULL);

View File

@ -150,8 +150,7 @@ int32_t tree_height(struct _tree* self, struct _tree_node* root)
int32_t count_next_level = 0;
struct _tree_node* node = root;
queue_t queue = queue_new();
queue_init(queue, sizeof(struct _tree_node*));
queue_t queue = queue_new(sizeof(struct _tree_node*));
queue->push(queue, &node);
while (!queue->empty(queue))
@ -571,8 +570,7 @@ bool tree_clear(struct _tree* self)
}
struct _tree_node* node = self->_root;
queue_t queue = queue_new();
queue_init(queue, sizeof(struct _tree_node*));
queue_t queue = queue_new(sizeof(struct _tree_node*));
queue->push(queue, &node);
while (!queue->empty(queue))
@ -900,8 +898,7 @@ void tree_breadth(struct _tree* self, struct _tree_node* root)
}
struct _tree_node* node = root;
queue_t queue = queue_new();
queue_init(queue, sizeof(struct _tree_node*));
queue_t queue = queue_new(sizeof(struct _tree_node*));
if (node != NULL)
{
@ -1936,12 +1933,11 @@ bool tree_avl_init(struct _tree* self, uint32_t obj_size)
{
goto done;
}
self->queue = queue_new();
self->queue = queue_new(sizeof(struct _tree_node*));
if (self->queue == NULL)
{
goto done1;
}
queue_init(self->queue, sizeof(struct _tree_node*));
self->cur_node = NULL;
return true;
@ -1996,12 +1992,11 @@ bool tree_rb_init(struct _tree* self, uint32_t obj_size)
{
goto done;
}
self->queue = queue_new();
self->queue = queue_new(sizeof(struct _tree_node*));
if (self->queue == NULL)
{
goto done1;
}
queue_init(self->queue, sizeof(struct _tree_node*));
self->cur_node = NULL;
return true;

View File

@ -10,62 +10,29 @@
*/
#include "test.h"
static void test_queue_init(void)
{
struct _queue queue;
// ------------------------------
#ifdef NDEBUG
TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int)));
TEST_ASSERT_FALSE(queue_init(&queue, 0));
#endif
TEST_ASSERT_TRUE(queue_init(&queue, sizeof(int)));
queue.destory(&queue);
// ------------------------------
#ifdef NDEBUG
TEST_ASSERT_FALSE(queue_init2(NULL, sizeof(int), 1));
TEST_ASSERT_FALSE(queue_init2(&queue, 0, 1));
TEST_ASSERT_FALSE(queue_init2(&queue, sizeof(int), 0));
#endif
TEST_ASSERT_TRUE(queue_init2(&queue, sizeof(int), 1));
queue.destory(&queue);
}
static void test_queue_new(void)
{
queue_t queue = NULL;
queue = queue_new();
queue = queue_new(sizeof(int));
TEST_ASSERT_NOT_NULL(queue);
queue_free(&queue);
TEST_ASSERT_NULL(queue_new(0));
// ------------------------------
queue = queue_new();
queue = queue_new2(sizeof(int), 10);
TEST_ASSERT_NOT_NULL(queue);
#ifdef NDEBUG
TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int)));
TEST_ASSERT_FALSE(queue_init(queue, 0));
#endif
TEST_ASSERT_TRUE(queue_init(queue, sizeof(int)));
queue_free(&queue);
TEST_ASSERT_NULL(queue_new2(0, 0));
TEST_ASSERT_NULL(queue_new2(0, 1));
TEST_ASSERT_NULL(queue_new2(sizeof(int), 0));
// ------------------------------
queue = queue_new();
TEST_ASSERT_NOT_NULL(queue);
#ifdef NDEBUG
TEST_ASSERT_FALSE(queue_init2(NULL, sizeof(int), 1));
TEST_ASSERT_FALSE(queue_init2(queue, 0, 1));
TEST_ASSERT_FALSE(queue_init2(queue, sizeof(int), 0));
#endif
TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 1));
queue_free(&queue);
TEST_ASSERT_NULL(queue);
queue_free(&queue); // queue_free(NULL);
queue_free(&queue);
}
static void test_queue_push(void)
{
int temp = 0;
@ -76,8 +43,8 @@ static void test_queue_push(void)
queue_t queue = NULL;
// ------------------------------
queue = queue_new();
queue_init(queue, sizeof(int));
queue = queue_new(sizeof(int));
TEST_ASSERT_TRUE(queue->empty(queue));
for(i = 0; i < len; i++)
{
@ -95,8 +62,8 @@ static void test_queue_push(void)
queue_free(&queue);
// ------------------------------
queue = queue_new();
queue_init2(queue, sizeof(int), len);
queue = queue_new2(sizeof(int), len);
TEST_ASSERT_TRUE(queue->empty(queue));
for(i = 0; i < len; i++)
{
@ -115,8 +82,8 @@ static void test_queue_push(void)
// ------------------------------
// if capacity is less than data len
queue = queue_new();
queue_init2(queue, sizeof(int), len - 2);
queue = queue_new2(sizeof(int), len - 2);
for(i = 0; i < len; i++)
{
if(i < queue->capacity(queue))
@ -147,8 +114,8 @@ static void test_queue_pop(void)
queue_t queue = NULL;
// ------------------------------
queue = queue_new();
queue_init(queue, sizeof(int));
queue = queue_new(sizeof(int));
for(i = 0; i < len; i++)
{
queue->push(queue, &data[i]);
@ -184,8 +151,8 @@ static void test_queue_pop(void)
queue_free(&queue);
// ------------------------------
queue = queue_new();
queue_init2(queue, sizeof(int), len);
queue = queue_new2(sizeof(int), len);
for(i = 0; i < len; i++)
{
queue->push(queue, &data[i]);
@ -223,8 +190,8 @@ static void test_queue_pop(void)
// ------------------------------
// if capacity is less than data len
queue = queue_new();
queue_init2(queue, sizeof(int), len - 2);
queue = queue_new2(sizeof(int), len - 2);
for(i = 0; i < len; i++)
{
if(i < queue->capacity(queue))
@ -287,8 +254,8 @@ static void test_queue_clear(void)
queue_t queue = NULL;
// ------------------------------
queue = queue_new();
queue_init(queue, sizeof(int));
queue = queue_new(sizeof(int));
for(i = 0; i < len; i++)
{
queue->push(queue, &data[i]);
@ -305,8 +272,8 @@ static void test_queue_clear(void)
queue_free(&queue);
// ------------------------------
queue = queue_new();
queue_init2(queue, sizeof(int), len);
queue = queue_new2(sizeof(int), len);
TEST_ASSERT_TRUE(queue->clear(queue));
for(i = 0; i < len; i++)
{
@ -328,10 +295,9 @@ static void test_queue_num(void)
uint32_t len = sizeof(data) / sizeof(data[0]);
queue_t queue = NULL;
queue = queue_new();
queue = queue_new(sizeof(int));
TEST_ASSERT_NOT_NULL(queue);
TEST_ASSERT_TRUE(queue_init(queue, sizeof(int)));
queue->print_obj = print_num;
TEST_ASSERT_TRUE(queue->clear(queue));
@ -396,10 +362,9 @@ static void test_queue_struct(void)
struct _student temp;
uint32_t len = sizeof(data) / sizeof(data[0]) - 1;
queue_t queue = queue_new();
queue_t queue = queue_new(sizeof(struct _student));
TEST_ASSERT_NOT_NULL(queue);
queue_init(queue, sizeof(struct _student));
queue->print_obj = print_struct;
TEST_ASSERT_TRUE(queue->clear(queue));
@ -468,10 +433,9 @@ static void test_queue2_num(void)
uint32_t capacity = len;
queue_t queue = NULL;
queue = queue_new();
queue = queue_new2(sizeof(int), capacity);
TEST_ASSERT_NOT_NULL(queue);
TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), capacity));
queue->print_obj = print_num;
TEST_ASSERT_TRUE(queue->clear(queue));
@ -538,10 +502,9 @@ static void test_queue2_struct(void)
uint32_t capacity = len - 2;
queue_t queue = NULL;
queue = queue_new();
queue = queue_new2(sizeof(struct _student), capacity);
TEST_ASSERT_NOT_NULL(queue);
TEST_ASSERT_TRUE(queue_init2(queue, sizeof(struct _student), capacity));
queue->print_obj = print_struct;
TEST_ASSERT_TRUE(queue->empty(queue));
@ -627,7 +590,6 @@ void test_queue(void)
{
UnitySetTestFile(__FILE__);
RUN_TEST(test_queue_init);
RUN_TEST(test_queue_new);
RUN_TEST(test_queue_push);
RUN_TEST(test_queue_pop);