实测queue入队和出队元素为结构体通过

This commit is contained in:
建峰 2024-06-23 17:57:23 +08:00
parent 6500d9dac4
commit 785482d7fb
5 changed files with 160 additions and 8 deletions

2
.vscode/launch.json vendored
View File

@ -10,7 +10,7 @@
"request": "launch",
"program": "${workspaceFolder}/build/release/bin/test.exe",
"args": [],
"stopAtEntry": true,
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,

View File

@ -9,6 +9,7 @@
*
*/
#include "tree.h"
#include "queue.h"
#if RAVLTREE == 1
// function declare
@ -1681,7 +1682,43 @@ void tree_avl_postorder(struct _tree* self, struct _tree_node* root)
// traversal breadth
void tree_avl_breadth(struct _tree* self, struct _tree_node* root)
{
assert(self != NULL);
struct _tree_node* node = self->_root;
queue_t queue = queue_new();
queue_init(queue, self->_obj_size);
if(node != NULL)
{
queue->push(queue, node);
while(!queue->empty(queue))
{
queue->pop(queue, node);
if(!self->_right_priority)
{
if(node->left != NULL)
{
queue->push(queue, node->left);
}
if(node->right != NULL)
{
queue->push(queue, node->right);
}
}
else
{
if(node->right != NULL)
{
queue->push(queue, node->right);
}
if(node->left != NULL)
{
queue->push(queue, node->left);
}
}
self->print_obj(node->obj);
}
}
queue_free(queue);
}
bool tree_avl_init(struct _tree *self, uint32_t obj_size)

View File

@ -38,8 +38,8 @@ int main()
// test_list();
// test_stack();
// test_deque();
// test_queue();
test_tree();
test_queue();
// test_tree();
// rbtree_test();
}

View File

@ -142,7 +142,7 @@ static void test_queue_char(void)
}
printf("----- after pop -----\n");
for (i = 0; i < len + 1; i++)
while(!queue.empty(&queue))
{
if (true == queue.pop(&queue, &temp))
{
@ -163,16 +163,32 @@ static void test_queue_char(void)
printf("size = %2d\n", queue.size(&queue));
}
else
}
if (true == queue.pop(&queue, &temp))
{
printf("pop failed! because it is empty\n");
printf("pop = ");
queue.print_obj(&temp);
if (true == queue.front(&queue, &temp))
{
printf("front = ");
queue.print_obj(&temp);
}
if (queue.back(&queue, &temp))
{
printf("back = ");
queue.print_obj(&temp);
}
printf("size = %2d\n", queue.size(&queue));
}
if (queue.empty(&queue))
{
printf("----- empty -----\n");
}
}
printf("----- print -----\n");
queue.print(&queue);
@ -181,8 +197,99 @@ static void test_queue_char(void)
queue.destory(&queue);
}
static void test_queue_struct(void)
{
uint32_t i = 0;
struct _student data[] = {
{"zhao", 1001},{"qian", 1002}, {"sun", 1003}, {"li", 1004},
"zhou", 1005, "wu", 1006, "zheng", 1007, "wang", 1008,
};
struct _student temp;
uint32_t len = sizeof(data) / sizeof(data[0]) - 1;
queue_t queue = queue_new();
queue_init(queue, sizeof(struct _student));
queue->print_obj = print_struct;
printf("\n\n----- test_queue_struct -----\n");
printf("----- after push-----\n");
for (i = 0; i < len; i++)
{
if(queue->push(queue, &data[i]))
{
queue->front(queue, &temp);
printf("front = ");
queue->print_obj(&temp);
queue->back(queue, &temp);
printf("\tback = ");
queue->print_obj(&temp);
printf("\tsize = %2d\n", queue->size(queue));
}
}
printf("----- print -----\n");
queue->print(queue);
printf("\n");
queue->clear(queue);
if (queue->empty(queue))
{
printf("----- empty -----\n");
}
printf("----- push -----\n");
for (i = 0; i < len; i++)
{
queue->push(queue, &data[i]);
}
printf("----- after pop -----\n");
while(!queue->empty(queue))
{
if (true == queue->pop(queue, &temp))
{
printf("pop = ");
queue->print_obj(&temp);
if (true == queue->front(queue, &temp))
{
printf("front = ");
queue->print_obj(&temp);
}
if (queue->back(queue, &temp))
{
printf("back = ");
queue->print_obj(&temp);
}
printf("size = %2d\n", queue->size(queue));
}
}
if (!queue->pop(queue, &temp))
{
printf("----- pop failed! -----\n");
}
if (queue->empty(queue))
{
printf("----- empty -----\n");
}
printf("----- print -----\n");
queue->print(queue);
printf("\n");
queue_free(queue);
}
void test_queue(void)
{
test_queue_num();
test_queue_char();
test_queue_struct();
}

View File

@ -299,6 +299,10 @@ void test_tree_num(void)
tree->postorder(tree, tree->_root);
printf("\n");
printf("----- breadth -----\n");
tree->breadth(tree, tree->_root);
printf("\n");
printf("----- right priority -----\n");
tree->order(tree, true);
@ -314,6 +318,10 @@ void test_tree_num(void)
tree->postorder(tree, tree->_root);
printf("\n");
printf("----- breadth -----\n");
tree->breadth(tree, tree->_root);
printf("\n");
tree_free(tree);
}