demo代码全部修改成new的统一接口,考虑后面把init接口替掉。

This commit is contained in:
建峰 2024-09-01 23:24:25 +08:00
parent a0a49277b0
commit cf8579d03a
4 changed files with 541 additions and 184 deletions

View File

@ -17,33 +17,33 @@ static void demo_deque_num(void)
int temp = 0; int temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]); uint32_t len = sizeof(data) / sizeof(data[0]);
struct _deque dq; deque_t deque = deque_new();
deque_init(&dq, sizeof(int)); deque_init(deque, sizeof(int));
dq.print_obj = print_num; deque->print_obj = print_num;
printf("\n\n----- demo_deque_num -----\n"); printf("\n\n----- demo_deque_num -----\n");
printf("----- after push_back -----\n"); printf("----- after push_back -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_back(&dq, &data[i]); deque->push_back(deque, &data[i]);
dq.front(&dq, &temp); deque->front(deque, &temp);
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
dq.back(&dq, &temp); deque->back(deque, &temp);
printf("\tback = "); printf("\tback = ");
dq.print_obj(&temp); deque->print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq)); printf("\tsize = %2d\n", deque->size(deque));
} }
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
dq.clear(&dq); deque->clear(deque);
if (dq.empty(&dq)) if (deque->empty(deque))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -51,37 +51,37 @@ static void demo_deque_num(void)
printf("----- push_back -----\n"); printf("----- push_back -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_back(&dq, &data[i]); deque->push_back(deque, &data[i]);
} }
printf("----- after pop_back -----\n"); printf("----- after pop_back -----\n");
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == dq.pop_back(&dq, &temp)) if (true == deque->pop_back(deque, &temp))
{ {
printf("pop = "); printf("pop = ");
dq.print_obj(&temp); deque->print_obj(&temp);
if (true == dq.front(&dq, &temp)) if (true == deque->front(deque, &temp))
{ {
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
if (dq.back(&dq, &temp)) if (deque->back(deque, &temp))
{ {
printf("back = "); printf("back = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
printf("size = %2d\n", dq.size(&dq)); printf("size = %2d\n", deque->size(deque));
} }
else else
{ {
printf("pop failed! because it is empty\n"); printf("pop failed! because it is empty\n");
} }
if (dq.empty(&dq)) if (deque->empty(deque))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -90,24 +90,24 @@ static void demo_deque_num(void)
printf("----- after push_front -----\n"); printf("----- after push_front -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_front(&dq, &data[i]); deque->push_front(deque, &data[i]);
dq.front(&dq, &temp); deque->front(deque, &temp);
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
dq.back(&dq, &temp); deque->back(deque, &temp);
printf("\tback = "); printf("\tback = ");
dq.print_obj(&temp); deque->print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq)); printf("\tsize = %2d\n", deque->size(deque));
} }
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
dq.clear(&dq); deque->clear(deque);
if (dq.empty(&dq)) if (deque->empty(deque))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -115,67 +115,67 @@ static void demo_deque_num(void)
printf("----- push_front -----\n"); printf("----- push_front -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_front(&dq, &data[i]); deque->push_front(deque, &data[i]);
} }
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == dq.pop_front(&dq, &temp)) if (true == deque->pop_front(deque, &temp))
{ {
printf("pop = "); printf("pop = ");
dq.print_obj(&temp); deque->print_obj(&temp);
if (true == dq.front(&dq, &temp)) if (true == deque->front(deque, &temp))
{ {
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
if (dq.back(&dq, &temp)) if (deque->back(deque, &temp))
{ {
printf("back = "); printf("back = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
printf("size = %2d\n", dq.size(&dq)); printf("size = %2d\n", deque->size(deque));
} }
} }
printf("----- push_front -----\n"); printf("----- push_front -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_front(&dq, &data[i]); deque->push_front(deque, &data[i]);
} }
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
printf("----- set -----\n"); printf("----- set -----\n");
temp = 11; temp = 11;
dq.set(&dq, 0, &temp); deque->set(deque, 0, &temp);
temp = 22; temp = 22;
dq.set(&dq, len/2, &temp); deque->set(deque, len/2, &temp);
temp = 33; temp = 33;
dq.set(&dq, len - 1, &temp); deque->set(deque, len - 1, &temp);
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
printf("----- get -----\n"); printf("----- get -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
if (true == dq.get(&dq, i, &temp)) if (true == deque->get(deque, i, &temp))
{ {
printf("deque[%2d] = ", i); printf("deque[%2d] = ", i);
dq.print_obj(&temp); deque->print_obj(&temp);
printf("\n"); printf("\n");
} }
} }
dq.destory(&dq); deque_free(&deque);
} }
static void demo_deque_struct(void) static void demo_deque_struct(void)
@ -189,33 +189,33 @@ static void demo_deque_struct(void)
struct _student temp = {0}; struct _student temp = {0};
uint32_t len = sizeof(data) / sizeof(data[0]); uint32_t len = sizeof(data) / sizeof(data[0]);
struct _deque dq; deque_t deque = deque_new();
deque_init(&dq, sizeof(struct _student)); deque_init(deque, sizeof(struct _student));
dq.print_obj = print_struct; deque->print_obj = print_struct;
printf("\n\n----- demo_deque_struct -----\n"); printf("\n\n----- demo_deque_struct -----\n");
printf("----- after push_back -----\n"); printf("----- after push_back -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_back(&dq, &data[i]); deque->push_back(deque, &data[i]);
dq.front(&dq, &temp); deque->front(deque, &temp);
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
dq.back(&dq, &temp); deque->back(deque, &temp);
printf("\tback = "); printf("\tback = ");
dq.print_obj(&temp); deque->print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq)); printf("\tsize = %2d\n", deque->size(deque));
} }
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
dq.clear(&dq); deque->clear(deque);
if (dq.empty(&dq)) if (deque->empty(deque))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -223,37 +223,37 @@ static void demo_deque_struct(void)
printf("----- push_back -----\n"); printf("----- push_back -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_back(&dq, &data[i]); deque->push_back(deque, &data[i]);
} }
printf("----- after pop_back -----\n"); printf("----- after pop_back -----\n");
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == dq.pop_back(&dq, &temp)) if (true == deque->pop_back(deque, &temp))
{ {
printf("pop = "); printf("pop = ");
dq.print_obj(&temp); deque->print_obj(&temp);
if (true == dq.front(&dq, &temp)) if (true == deque->front(deque, &temp))
{ {
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
if (dq.back(&dq, &temp)) if (deque->back(deque, &temp))
{ {
printf("back = "); printf("back = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
printf("size = %2d\n", dq.size(&dq)); printf("size = %2d\n", deque->size(deque));
} }
else else
{ {
printf("pop failed! because it is empty\n"); printf("pop failed! because it is empty\n");
} }
if (dq.empty(&dq)) if (deque->empty(deque))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -262,24 +262,24 @@ static void demo_deque_struct(void)
printf("----- after push_front -----\n"); printf("----- after push_front -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_front(&dq, &data[i]); deque->push_front(deque, &data[i]);
dq.front(&dq, &temp); deque->front(deque, &temp);
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
dq.back(&dq, &temp); deque->back(deque, &temp);
printf("\tback = "); printf("\tback = ");
dq.print_obj(&temp); deque->print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq)); printf("\tsize = %2d\n", deque->size(deque));
} }
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
dq.clear(&dq); deque->clear(deque);
if (dq.empty(&dq)) if (deque->empty(deque))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -287,69 +287,69 @@ static void demo_deque_struct(void)
printf("----- push_front -----\n"); printf("----- push_front -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_front(&dq, &data[i]); deque->push_front(deque, &data[i]);
} }
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == dq.pop_front(&dq, &temp)) if (true == deque->pop_front(deque, &temp))
{ {
printf("pop = "); printf("pop = ");
dq.print_obj(&temp); deque->print_obj(&temp);
if (true == dq.front(&dq, &temp)) if (true == deque->front(deque, &temp))
{ {
printf("front = "); printf("front = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
if (dq.back(&dq, &temp)) if (deque->back(deque, &temp))
{ {
printf("back = "); printf("back = ");
dq.print_obj(&temp); deque->print_obj(&temp);
} }
printf("size = %2d\n", dq.size(&dq)); printf("size = %2d\n", deque->size(deque));
} }
} }
printf("----- push_front -----\n"); printf("----- push_front -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
dq.push_front(&dq, &data[i]); deque->push_front(deque, &data[i]);
} }
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
#if 0 #if 0
printf("----- set -----\n"); printf("----- set -----\n");
temp = 11; temp = 11;
dq.set(&dq, 0, &temp); deque->set(deque, 0, &temp);
temp = 22; temp = 22;
dq.set(&dq, len / 2, &temp); deque->set(deque, len / 2, &temp);
temp = 33; temp = 33;
dq.set(&dq, len - 1, &temp); deque->set(deque, len - 1, &temp);
printf("----- print -----\n"); printf("----- print -----\n");
dq.print(&dq); deque->print(deque);
printf("\n"); printf("\n");
#endif #endif
printf("----- get -----\n"); printf("----- get -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
if (true == dq.get(&dq, i, &temp)) if (true == deque->get(deque, i, &temp))
{ {
printf("deque[%2d] = ", i); printf("deque[%2d] = ", i);
dq.print_obj(&temp); deque->print_obj(&temp);
printf("\n"); printf("\n");
} }
} }
dq.destory(&dq); deque_free(&deque);
} }
void demo_deque(void) void demo_deque(void)

View File

@ -17,33 +17,33 @@ static void demo_queue_num(void)
int temp = 0; int temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]); uint32_t len = sizeof(data) / sizeof(data[0]);
struct _queue queue; queue_t queue = queue_new();
queue_init(&queue, sizeof(int)); queue_init(queue, sizeof(int));
queue.print_obj = print_num; queue->print_obj = print_num;
printf("\n\n----- demo_queue_num -----\n"); printf("\n\n----- demo_queue_num -----\n");
printf("----- after push-----\n"); printf("----- after push-----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
queue.push(&queue, &data[i]); queue->push(queue, &data[i]);
queue.front(&queue, &temp); queue->front(queue, &temp);
printf("front = "); printf("front = ");
queue.print_obj(&temp); queue->print_obj(&temp);
queue.back(&queue, &temp); queue->back(queue, &temp);
printf("\tback = "); printf("\tback = ");
queue.print_obj(&temp); queue->print_obj(&temp);
printf("\tsize = %2d\n", queue.size(&queue)); printf("\tsize = %2d\n", queue->size(queue));
} }
printf("----- print -----\n"); printf("----- print -----\n");
queue.print(&queue); queue->print(queue);
printf("\n"); printf("\n");
queue.clear(&queue); queue->clear(queue);
if (queue.empty(&queue)) if (queue->empty(queue))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -51,47 +51,47 @@ static void demo_queue_num(void)
printf("----- push -----\n"); printf("----- push -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
queue.push(&queue, &data[i]); queue->push(queue, &data[i]);
} }
printf("----- after pop -----\n"); printf("----- after pop -----\n");
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == queue.pop(&queue, &temp)) if (true == queue->pop(queue, &temp))
{ {
printf("pop = "); printf("pop = ");
queue.print_obj(&temp); queue->print_obj(&temp);
if (true == queue.front(&queue, &temp)) if (true == queue->front(queue, &temp))
{ {
printf("front = "); printf("front = ");
queue.print_obj(&temp); queue->print_obj(&temp);
} }
if (queue.back(&queue, &temp)) if (queue->back(queue, &temp))
{ {
printf("back = "); printf("back = ");
queue.print_obj(&temp); queue->print_obj(&temp);
} }
printf("size = %2d\n", queue.size(&queue)); printf("size = %2d\n", queue->size(queue));
} }
else else
{ {
printf("pop failed! because it is empty\n"); printf("pop failed! because it is empty\n");
} }
if (queue.empty(&queue)) if (queue->empty(queue))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
} }
printf("----- print -----\n"); printf("----- print -----\n");
queue.print(&queue); queue->print(queue);
printf("\n"); printf("\n");
queue.destory(&queue); queue_free(&queue);
} }
@ -102,44 +102,43 @@ static void demo_queue_char(void)
char temp = 0; char temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]) - 1; uint32_t len = sizeof(data) / sizeof(data[0]) - 1;
struct _queue queue; queue_t queue = queue_new();
// queue_init2(&queue, sizeof(char), 64); queue_init2(queue, sizeof(char), 10);
queue_init2(&queue, sizeof(char), 10); queue->print_obj = print_char;
queue.print_obj = print_char;
printf("\n\n----- demo_queue_char -----\n"); printf("\n\n----- demo_queue_char -----\n");
printf("----- after push-----\n"); printf("----- after push-----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
if(queue.push(&queue, &data[i])) if(queue->push(queue, &data[i]))
{ {
queue.front(&queue, &temp); queue->front(queue, &temp);
printf("front = "); printf("front = ");
queue.print_obj(&temp); queue->print_obj(&temp);
queue.back(&queue, &temp); queue->back(queue, &temp);
printf("\tback = "); printf("\tback = ");
queue.print_obj(&temp); queue->print_obj(&temp);
printf("\tsize = %2d\n", queue.size(&queue)); printf("\tsize = %2d\n", queue->size(queue));
} }
else else
{ {
printf("push failed! because it is full\n"); printf("push failed! because it is full\n");
} }
if(queue.full(&queue)) if(queue->full(queue))
{ {
printf("----- full -----\n"); printf("----- full -----\n");
} }
} }
printf("----- print -----\n"); printf("----- print -----\n");
queue.print(&queue); queue->print(queue);
printf("\n"); printf("\n");
queue.clear(&queue); queue->clear(queue);
if (queue.empty(&queue)) if (queue->empty(queue))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
@ -147,63 +146,63 @@ static void demo_queue_char(void)
printf("----- push -----\n"); printf("----- push -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
queue.push(&queue, &data[i]); queue->push(queue, &data[i]);
} }
printf("----- after pop -----\n"); printf("----- after pop -----\n");
while(!queue.empty(&queue)) while(!queue->empty(queue))
{ {
if (true == queue.pop(&queue, &temp)) if (true == queue->pop(queue, &temp))
{ {
printf("pop = "); printf("pop = ");
queue.print_obj(&temp); queue->print_obj(&temp);
if (true == queue.front(&queue, &temp)) if (true == queue->front(queue, &temp))
{ {
printf("front = "); printf("front = ");
queue.print_obj(&temp); queue->print_obj(&temp);
} }
if (queue.back(&queue, &temp)) if (queue->back(queue, &temp))
{ {
printf("back = "); printf("back = ");
queue.print_obj(&temp); queue->print_obj(&temp);
} }
printf("size = %2d\n", queue.size(&queue)); printf("size = %2d\n", queue->size(queue));
} }
} }
if (true == queue.pop(&queue, &temp)) if (true == queue->pop(queue, &temp))
{ {
printf("pop = "); printf("pop = ");
queue.print_obj(&temp); queue->print_obj(&temp);
if (true == queue.front(&queue, &temp)) if (true == queue->front(queue, &temp))
{ {
printf("front = "); printf("front = ");
queue.print_obj(&temp); queue->print_obj(&temp);
} }
if (queue.back(&queue, &temp)) if (queue->back(queue, &temp))
{ {
printf("back = "); printf("back = ");
queue.print_obj(&temp); queue->print_obj(&temp);
} }
printf("size = %2d\n", queue.size(&queue)); printf("size = %2d\n", queue->size(queue));
} }
if (queue.empty(&queue)) if (queue->empty(queue))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
printf("----- print -----\n"); printf("----- print -----\n");
queue.print(&queue); queue->print(queue);
printf("\n"); printf("\n");
queue.destory(&queue); queue_free(&queue);
} }
static void demo_queue_struct(void) static void demo_queue_struct(void)

View File

@ -17,58 +17,58 @@ static void demo_stack_num(void)
int temp = 0; int temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]); uint32_t len = sizeof(data) / sizeof(data[0]);
struct _stack s; stack_t stack = stack_new();
stack_init(&s, sizeof(int)); stack_init(stack, sizeof(int));
s.print_obj = print_num; stack->print_obj = print_num;
printf("\n\n----- demo_stack_num -----\n"); printf("\n\n----- demo_stack_num -----\n");
// get top if stack is empty // get top if stack is empty
s.peek(&s, &temp); stack->peek(stack, &temp);
printf("----- push -----\n"); printf("----- push -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
s.push(&s, &data[i]); stack->push(stack, &data[i]);
s.peek(&s, &temp); stack->peek(stack, &temp);
printf("top = "); printf("top = ");
s.print_obj(&temp); stack->print_obj(&temp);
printf("size = %2d\n", s.size(&s)); printf("size = %2d\n", stack->size(stack));
} }
printf("----- print -----\n"); printf("----- print -----\n");
s.print(&s); stack->print(stack);
printf("\n"); printf("\n");
printf("----- pop -----\n"); printf("----- pop -----\n");
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == s.pop(&s, &temp)) if (true == stack->pop(stack, &temp))
{ {
printf("pop = "); printf("pop = ");
s.print_obj(&temp); stack->print_obj(&temp);
if (s.peek(&s, &temp)) if (stack->peek(stack, &temp))
{ {
printf("top = "); printf("top = ");
s.print_obj(&temp); stack->print_obj(&temp);
} }
printf("size = %2d\n", s.size(&s)); printf("size = %2d\n", stack->size(stack));
} }
else else
{ {
printf("pop failed! because it is empty\n"); printf("pop failed! because it is empty\n");
} }
if (s.empty(&s)) if (stack->empty(stack))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
} }
s.destory(&s); stack_free(&stack);
} }
static void demo_stack_char(void) static void demo_stack_char(void)
@ -78,57 +78,57 @@ static void demo_stack_char(void)
char temp = 0; char temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]) - 1; uint32_t len = sizeof(data) / sizeof(data[0]) - 1;
struct _stack s; stack_t stack = stack_new();
stack_init2(&s, sizeof(char), 64); stack_init2(stack, sizeof(char), 64);
s.print_obj = print_char; stack->print_obj = print_char;
printf("\n\n----- demo_stack_char -----\n"); printf("\n\n----- demo_stack_char -----\n");
// get top if stack is empty // get top if stack is empty
s.peek(&s, &temp); stack->peek(stack, &temp);
printf("----- push -----\n"); printf("----- push -----\n");
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
{ {
s.push(&s, &data[i]); stack->push(stack, &data[i]);
s.peek(&s, &temp); stack->peek(stack, &temp);
printf("top = "); printf("top = ");
s.print_obj(&temp); stack->print_obj(&temp);
printf("size = %2d\n", s.size(&s)); printf("size = %2d\n", stack->size(stack));
} }
printf("----- print -----\n"); printf("----- print -----\n");
s.print(&s); stack->print(stack);
printf("\n"); printf("\n");
printf("----- pop -----\n"); printf("----- pop -----\n");
for (i = 0; i < len + 1; i++) for (i = 0; i < len + 1; i++)
{ {
if (true == s.pop(&s, &temp)) if (true == stack->pop(stack, &temp))
{ {
printf("pop = "); printf("pop = ");
s.print_obj(&temp); stack->print_obj(&temp);
if (s.peek(&s, &temp)) if (stack->peek(stack, &temp))
{ {
printf("top = "); printf("top = ");
s.print_obj(&temp); stack->print_obj(&temp);
} }
printf("size = %2d\n", s.size(&s)); printf("size = %2d\n", stack->size(stack));
} }
else else
{ {
printf("pop failed! because it is empty\n"); printf("pop failed! because it is empty\n");
} }
if (s.empty(&s)) if (stack->empty(stack))
{ {
printf("----- empty -----\n"); printf("----- empty -----\n");
} }
} }
s.destory(&s); stack_free(&stack);
} }
static void demo_stack_struct(void) static void demo_stack_struct(void)
@ -141,8 +141,7 @@ static void demo_stack_struct(void)
struct _student temp = { 0 }; struct _student temp = { 0 };
uint32_t len = sizeof(data) / sizeof(data[0]); uint32_t len = sizeof(data) / sizeof(data[0]);
stack_t stack; stack_t stack = stack_new();
stack = stack_new();
stack_init(stack, sizeof(struct _student)); stack_init(stack, sizeof(struct _student));
stack->print_obj = print_struct; stack->print_obj = print_struct;

359
test/test_deque.c Normal file
View File

@ -0,0 +1,359 @@
/**
* @file test_deque.c
* @author wenjf (Orig5826@163.com)
* @brief
* @version 0.1
* @date 2024-09-01
*
* @copyright Copyright (c) 2024
*
*/
#include "test.h"
static void demo_deque_num(void)
{
uint32_t i = 0;
int data[] = { 1,2,3,4,5,6,7,8,9,10 };
int temp = 0;
uint32_t len = sizeof(data) / sizeof(data[0]);
struct _deque dq;
deque_init(&dq, sizeof(int));
dq.print_obj = print_num;
printf("\n\n----- demo_deque_num -----\n");
printf("----- after push_back -----\n");
for (i = 0; i < len; i++)
{
dq.push_back(&dq, &data[i]);
dq.front(&dq, &temp);
printf("front = ");
dq.print_obj(&temp);
dq.back(&dq, &temp);
printf("\tback = ");
dq.print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq));
}
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
dq.clear(&dq);
if (dq.empty(&dq))
{
printf("----- empty -----\n");
}
printf("----- push_back -----\n");
for (i = 0; i < len; i++)
{
dq.push_back(&dq, &data[i]);
}
printf("----- after pop_back -----\n");
for (i = 0; i < len + 1; i++)
{
if (true == dq.pop_back(&dq, &temp))
{
printf("pop = ");
dq.print_obj(&temp);
if (true == dq.front(&dq, &temp))
{
printf("front = ");
dq.print_obj(&temp);
}
if (dq.back(&dq, &temp))
{
printf("back = ");
dq.print_obj(&temp);
}
printf("size = %2d\n", dq.size(&dq));
}
else
{
printf("pop failed! because it is empty\n");
}
if (dq.empty(&dq))
{
printf("----- empty -----\n");
}
}
printf("----- after push_front -----\n");
for (i = 0; i < len; i++)
{
dq.push_front(&dq, &data[i]);
dq.front(&dq, &temp);
printf("front = ");
dq.print_obj(&temp);
dq.back(&dq, &temp);
printf("\tback = ");
dq.print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq));
}
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
dq.clear(&dq);
if (dq.empty(&dq))
{
printf("----- empty -----\n");
}
printf("----- push_front -----\n");
for (i = 0; i < len; i++)
{
dq.push_front(&dq, &data[i]);
}
for (i = 0; i < len + 1; i++)
{
if (true == dq.pop_front(&dq, &temp))
{
printf("pop = ");
dq.print_obj(&temp);
if (true == dq.front(&dq, &temp))
{
printf("front = ");
dq.print_obj(&temp);
}
if (dq.back(&dq, &temp))
{
printf("back = ");
dq.print_obj(&temp);
}
printf("size = %2d\n", dq.size(&dq));
}
}
printf("----- push_front -----\n");
for (i = 0; i < len; i++)
{
dq.push_front(&dq, &data[i]);
}
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
printf("----- set -----\n");
temp = 11;
dq.set(&dq, 0, &temp);
temp = 22;
dq.set(&dq, len/2, &temp);
temp = 33;
dq.set(&dq, len - 1, &temp);
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
printf("----- get -----\n");
for (i = 0; i < len; i++)
{
if (true == dq.get(&dq, i, &temp))
{
printf("deque[%2d] = ", i);
dq.print_obj(&temp);
printf("\n");
}
}
dq.destory(&dq);
}
static void demo_deque_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,
"feng", 1009, "cheng",1010,
};
struct _student temp = {0};
uint32_t len = sizeof(data) / sizeof(data[0]);
struct _deque dq;
deque_init(&dq, sizeof(struct _student));
dq.print_obj = print_struct;
printf("\n\n----- demo_deque_struct -----\n");
printf("----- after push_back -----\n");
for (i = 0; i < len; i++)
{
dq.push_back(&dq, &data[i]);
dq.front(&dq, &temp);
printf("front = ");
dq.print_obj(&temp);
dq.back(&dq, &temp);
printf("\tback = ");
dq.print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq));
}
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
dq.clear(&dq);
if (dq.empty(&dq))
{
printf("----- empty -----\n");
}
printf("----- push_back -----\n");
for (i = 0; i < len; i++)
{
dq.push_back(&dq, &data[i]);
}
printf("----- after pop_back -----\n");
for (i = 0; i < len + 1; i++)
{
if (true == dq.pop_back(&dq, &temp))
{
printf("pop = ");
dq.print_obj(&temp);
if (true == dq.front(&dq, &temp))
{
printf("front = ");
dq.print_obj(&temp);
}
if (dq.back(&dq, &temp))
{
printf("back = ");
dq.print_obj(&temp);
}
printf("size = %2d\n", dq.size(&dq));
}
else
{
printf("pop failed! because it is empty\n");
}
if (dq.empty(&dq))
{
printf("----- empty -----\n");
}
}
printf("----- after push_front -----\n");
for (i = 0; i < len; i++)
{
dq.push_front(&dq, &data[i]);
dq.front(&dq, &temp);
printf("front = ");
dq.print_obj(&temp);
dq.back(&dq, &temp);
printf("\tback = ");
dq.print_obj(&temp);
printf("\tsize = %2d\n", dq.size(&dq));
}
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
dq.clear(&dq);
if (dq.empty(&dq))
{
printf("----- empty -----\n");
}
printf("----- push_front -----\n");
for (i = 0; i < len; i++)
{
dq.push_front(&dq, &data[i]);
}
for (i = 0; i < len + 1; i++)
{
if (true == dq.pop_front(&dq, &temp))
{
printf("pop = ");
dq.print_obj(&temp);
if (true == dq.front(&dq, &temp))
{
printf("front = ");
dq.print_obj(&temp);
}
if (dq.back(&dq, &temp))
{
printf("back = ");
dq.print_obj(&temp);
}
printf("size = %2d\n", dq.size(&dq));
}
}
printf("----- push_front -----\n");
for (i = 0; i < len; i++)
{
dq.push_front(&dq, &data[i]);
}
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
#if 0
printf("----- set -----\n");
temp = 11;
dq.set(&dq, 0, &temp);
temp = 22;
dq.set(&dq, len / 2, &temp);
temp = 33;
dq.set(&dq, len - 1, &temp);
printf("----- print -----\n");
dq.print(&dq);
printf("\n");
#endif
printf("----- get -----\n");
for (i = 0; i < len; i++)
{
if (true == dq.get(&dq, i, &temp))
{
printf("deque[%2d] = ", i);
dq.print_obj(&temp);
printf("\n");
}
}
dq.destory(&dq);
}
void demo_deque(void)
{
demo_deque_num();
demo_deque_struct();
}