mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-04 08:06:52 +08:00
实现了list常用的接口
This commit is contained in:
parent
a8ae18828b
commit
6e367209ca
@ -360,78 +360,190 @@ void list_test(void)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// kernel
|
|
||||||
bool list_append(struct _list* self, void* obj)
|
bool list_append(struct _list* self, void* obj)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
assert(self->obj != NULL);
|
||||||
|
assert(obj != NULL);
|
||||||
|
|
||||||
|
if (self->size(self) == self->_capacity)
|
||||||
|
{
|
||||||
|
int capacity = self->_capacity * self->_ratio;
|
||||||
|
void * obj_new = (list_data_t*)realloc(self->obj, capacity * self->_obj_size);
|
||||||
|
if (obj_new == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
self->obj = obj_new;
|
||||||
|
self->_capacity = capacity;
|
||||||
|
}
|
||||||
|
uint32_t index = self->size(self);
|
||||||
|
uint32_t offset = index * self->_obj_size;
|
||||||
|
memmove((char*)self->obj + offset, obj, self->_obj_size);
|
||||||
|
|
||||||
|
self->_size += 1;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_clear(struct _list* self)
|
bool list_clear(struct _list* self)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
self->_size = 0;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_empty(struct _list* self)
|
bool list_empty(struct _list* self)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
return !self->size(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t list_index(struct _list* self, void* obj)
|
uint32_t list_index(struct _list* self, void* obj)
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_insert(struct _list* self, uint32_t index, void* obj)
|
bool list_insert(struct _list* self, uint32_t index, void* obj)
|
||||||
{
|
{
|
||||||
|
assert(index >= 0 && index < self->size(self));
|
||||||
|
|
||||||
|
if (self->size(self) == self->_capacity)
|
||||||
|
{
|
||||||
|
int capacity = self->_capacity * self->_ratio;
|
||||||
|
void* obj_new = (list_data_t*)realloc(self->obj, capacity * self->_obj_size);
|
||||||
|
if (obj_new == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
self->obj = obj_new;
|
||||||
|
self->_capacity = capacity;
|
||||||
|
}
|
||||||
|
uint32_t offset = index * self->_obj_size;
|
||||||
|
uint32_t offset1 = (index + 1) * self->_obj_size;
|
||||||
|
|
||||||
|
memmove((char*)self->obj + offset, (char *)self->obj + offset, self->size(self) * self->_obj_size);
|
||||||
|
self->_size += 1;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_pop(struct _list* self, uint32_t index, void* obj)
|
bool list_pop(struct _list* self, int index, void* obj)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self)); // list空的时候也会报错,太严格了有点
|
||||||
|
|
||||||
|
if (self->empty(self))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
index += self->size(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t count = self->size(self) - 1 - index;
|
||||||
|
uint32_t offset = index * self->_obj_size;
|
||||||
|
uint32_t offset1 = (index + 1) * self->_obj_size;
|
||||||
|
if (obj != NULL)
|
||||||
|
{
|
||||||
|
memmove(obj, (char*)self->obj + offset, self->_obj_size);
|
||||||
|
}
|
||||||
|
memmove((char*)self->obj + offset, (char*)self->obj + offset1, count * self->_obj_size);
|
||||||
|
self->_size -= 1;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_at(struct _list* self, uint32_t index)
|
bool list_at(struct _list* self, int index, void *obj)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
assert(obj != NULL);
|
||||||
|
assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self));
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
index += self->size(self);
|
||||||
|
}
|
||||||
|
uint32_t offset = index * self->_obj_size;
|
||||||
|
memmove(obj, (char*)self->obj + offset, self->_obj_size);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_set(struct _list* self, uint32_t index, void* obj)
|
bool list_set(struct _list* self, int index, void* obj)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self));
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
index += self->size(self);
|
||||||
|
}
|
||||||
|
uint32_t offset = index * self->_obj_size;
|
||||||
|
memmove((char*)self->obj + offset, obj, self->_obj_size);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t list_size(struct _list* self)
|
uint32_t list_size(struct _list* self)
|
||||||
{
|
{
|
||||||
|
return self->_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_remove(struct _list* self, uint32_t index)
|
bool list_remove(struct _list* self, int index)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
assert(index >= (int)(0 - self->size(self)) && index < (int)self->size(self));
|
||||||
|
|
||||||
|
if (self->empty(self))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
index += self->size(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t count = self->size(self) - 1 - index;
|
||||||
|
uint32_t offset = index * self->_obj_size;
|
||||||
|
uint32_t offset1 = (index + 1) * self->_obj_size;
|
||||||
|
memmove((char*)self->obj + offset, (char*)self->obj + offset1, count * self->_obj_size);
|
||||||
|
self->_size -= 1;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_reverse(struct _list* self)
|
bool list_reverse(struct _list* self)
|
||||||
{
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_sort(struct _list* self, uint8_t reserve, int (*compare)(void* obj, void* obj2))
|
bool list_sort(struct _list* self, uint8_t reserve, int (*compare)(void* obj, void* obj2))
|
||||||
{
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// free
|
// free
|
||||||
void list_destory(struct _list* self)
|
void list_destory(struct _list* self)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
if (self->obj != NULL)
|
||||||
|
{
|
||||||
|
free(self->obj);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// print
|
// print
|
||||||
void list_print(struct _list* self)
|
void list_print(struct _list* self)
|
||||||
{
|
{
|
||||||
|
assert(self != NULL);
|
||||||
|
|
||||||
|
if (!self->empty(self))
|
||||||
|
{
|
||||||
|
void* obj = NULL;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < self->size(self); i++)
|
||||||
|
{
|
||||||
|
obj = (char*)self->obj + i * self->_obj_size;
|
||||||
|
self->print_obj(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool list_init(struct _list* list, uint32_t obj_size)
|
bool list_init(struct _list* list, uint32_t obj_size)
|
||||||
@ -454,12 +566,12 @@ bool list_init(struct _list* list, uint32_t obj_size)
|
|||||||
list->index = list_index;
|
list->index = list_index;
|
||||||
list->insert = list_insert;
|
list->insert = list_insert;
|
||||||
list->pop = list_pop;
|
list->pop = list_pop;
|
||||||
list->print = list->print;
|
list->print = list_print;
|
||||||
list->remove = list->remove;
|
list->remove = list_remove;
|
||||||
list->reverse = list->reverse;
|
list->reverse = list_reverse;
|
||||||
list->set = list->set;
|
list->set = list_set;
|
||||||
list->size = list->size;
|
list->size = list_size;
|
||||||
list->sort = list->sort;
|
list->sort = list_sort;
|
||||||
|
|
||||||
// 3. set array
|
// 3. set array
|
||||||
list->obj = (void*)calloc(list->_capacity, list->_obj_size);
|
list->obj = (void*)calloc(list->_capacity, list->_obj_size);
|
||||||
|
@ -50,28 +50,22 @@ struct _list
|
|||||||
uint32_t _ratio; // À©Õ¹±ÈÂÊ
|
uint32_t _ratio; // À©Õ¹±ÈÂÊ
|
||||||
|
|
||||||
// kernel
|
// kernel
|
||||||
bool (*append)(struct _list* self, void* obj);
|
bool (*append)(struct _list* self, void* obj); // 追加对象
|
||||||
|
bool (*insert)(struct _list* self, uint32_t index, void* obj); // 在列表指定位置,插入对象
|
||||||
|
bool (*pop)(struct _list* self, int index, void* obj); // 根据索引,删除对象并返回。
|
||||||
|
bool (*remove)(struct _list* self, int index); // 根据索引,移除对象
|
||||||
|
|
||||||
|
int (*index)(struct _list* self, void* obj); // 在列表中,查找数据是否存在,若存在则返回其索引。否则返回-1
|
||||||
|
bool (*at)(struct _list* self, int index, void* obj); // 根据索引,获取对象
|
||||||
|
bool (*set)(struct _list* self, int index, void* obj); // 根据索引,修改对象
|
||||||
|
|
||||||
|
// base
|
||||||
|
uint32_t(*size)(struct _list* self);
|
||||||
bool (*clear)(struct _list* self);
|
bool (*clear)(struct _list* self);
|
||||||
|
|
||||||
bool (*empty)(struct _list* self);
|
bool (*empty)(struct _list* self);
|
||||||
|
|
||||||
uint32_t (*index)(struct _list* self, void* obj);
|
// sort
|
||||||
|
|
||||||
bool (*insert)(struct _list* self, uint32_t index, void* obj);
|
|
||||||
|
|
||||||
bool (*pop)(struct _list* self, uint32_t index, void* obj);
|
|
||||||
|
|
||||||
bool (*at)(struct _list* self, uint32_t index);
|
|
||||||
|
|
||||||
bool (*set)(struct _list* self, uint32_t index, void* obj);
|
|
||||||
|
|
||||||
uint32_t(*size)(struct _list* self);
|
|
||||||
|
|
||||||
bool (*remove)(struct _list* self, uint32_t index);
|
|
||||||
|
|
||||||
bool (*reverse)(struct _list* self);
|
bool (*reverse)(struct _list* self);
|
||||||
|
|
||||||
bool (*sort)(struct _list* self, uint8_t reserve, int (*compare)(void* obj, void* obj2));
|
bool (*sort)(struct _list* self, uint8_t reserve, int (*compare)(void* obj, void* obj2));
|
||||||
|
|
||||||
// free
|
// free
|
||||||
|
@ -1,72 +1,221 @@
|
|||||||
|
|
||||||
#include "test.h"
|
#include "list.h"
|
||||||
|
|
||||||
#if LIST_TEST == 1
|
#if 0
|
||||||
|
void list_test(void)
|
||||||
static void list_data_display(list_data_t data)
|
|
||||||
{
|
{
|
||||||
printf("%d ", data);
|
int i = 0;
|
||||||
|
|
||||||
|
list_data_t data = 0;
|
||||||
|
struct _list list;
|
||||||
|
list_init(&list);
|
||||||
|
|
||||||
|
printf("----- append -----\n");
|
||||||
|
for (i = 0; i < 18; i++)
|
||||||
|
{
|
||||||
|
list_append(&list, i);
|
||||||
|
list_print(&list);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("----- delete -----\n");
|
||||||
|
list_delete(&list, 17);
|
||||||
|
list_print(&list);
|
||||||
|
|
||||||
|
list_delete(&list, 0);
|
||||||
|
list_print(&list);
|
||||||
|
|
||||||
|
list_delete(&list, 9);
|
||||||
|
list_print(&list);
|
||||||
|
|
||||||
|
printf("----- clear -----\n");
|
||||||
|
list_clear(&list);
|
||||||
|
printf("----- insert -----\n");
|
||||||
|
for (i = 0; i < 18; i++)
|
||||||
|
{
|
||||||
|
list_insert(&list, 0, i);
|
||||||
|
list_print(&list);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("----- get -----\n");
|
||||||
|
data = list_get(&list, 0);
|
||||||
|
printf("list[0] = %2d\n", data);
|
||||||
|
|
||||||
|
data = list_get(&list, 17);
|
||||||
|
printf("list[17] = %2d\n", data);
|
||||||
|
|
||||||
|
data = list_get(&list, 5);
|
||||||
|
printf("list[5] = %2d\n", data);
|
||||||
|
|
||||||
|
printf("----- like python -----\n");
|
||||||
|
data = list_get(&list, -1);
|
||||||
|
printf("list[-1] = %2d\n", data);
|
||||||
|
|
||||||
|
data = list_get(&list, -5);
|
||||||
|
printf("list[-5] = %2d\n", data);
|
||||||
|
|
||||||
|
data = list_get(&list, -18);
|
||||||
|
printf("list[-18] = %2d\n", data);
|
||||||
|
|
||||||
|
printf("----- set -----\n");
|
||||||
|
for (i = 0; i < 18; i++)
|
||||||
|
{
|
||||||
|
list_set(&list, i, i);
|
||||||
|
list_print(&list);
|
||||||
|
}
|
||||||
|
|
||||||
|
list_print(&list);
|
||||||
|
list_destory(&list);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void print_num(void* obj)
|
||||||
|
{
|
||||||
|
printf("(%2d )", *(int*)obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void list_test_num(void)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int data[] = { 1,2,3,4,5,6,7,8,9,10 };
|
||||||
|
int temp = 0;
|
||||||
|
int index = 0;
|
||||||
|
int len = sizeof(data) / sizeof(data[0]);
|
||||||
|
|
||||||
|
struct _list list;
|
||||||
|
list_init(&list, sizeof(int));
|
||||||
|
list.print_obj = print_num;
|
||||||
|
|
||||||
|
printf("\n\n----- list_test_num -----\n");
|
||||||
|
printf("----- push -----\n");
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
list.append(&list, &data[i]);
|
||||||
|
}
|
||||||
|
printf("----- print -----\n");
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("----- remove -----\n");
|
||||||
|
list.remove(&list, 9);
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
list.remove(&list, 0);
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
list.remove(&list, 4);
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("----- clear -----\n");
|
||||||
|
list.clear(&list);
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("----- push -----\n");
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
list.append(&list, &data[i]);
|
||||||
|
}
|
||||||
|
printf("----- print -----\n");
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("----- at -----\n");
|
||||||
|
index = 0;
|
||||||
|
list.at(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = 4;
|
||||||
|
list.at(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = 9;
|
||||||
|
list.at(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
|
||||||
|
printf("----- set -----\n");
|
||||||
|
index = 0;
|
||||||
|
temp = 11;
|
||||||
|
list.set(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = 4;
|
||||||
|
temp = 22;
|
||||||
|
list.set(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = 9;
|
||||||
|
temp = 33;
|
||||||
|
list.set(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
printf("----- print -----\n");
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
printf("----- at like python -----\n");
|
||||||
|
index = -1;
|
||||||
|
list.at(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = -6;
|
||||||
|
list.at(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = -10;
|
||||||
|
list.at(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
printf("----- set like python -----\n");
|
||||||
|
index = -1;
|
||||||
|
temp = 99;
|
||||||
|
list.set(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = -6;
|
||||||
|
temp = 98;
|
||||||
|
list.set(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
index = -10;
|
||||||
|
temp = 97;
|
||||||
|
list.set(&list, index, &temp);
|
||||||
|
printf("list[%2d] = %2d\n", index, temp);
|
||||||
|
|
||||||
|
printf("----- print -----\n");
|
||||||
|
list.print(&list);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
printf("----- pop -----\n");
|
||||||
|
for (i = 0; i < len + 1; i++)
|
||||||
|
{
|
||||||
|
if (true == list.pop(&list, 0, &temp))
|
||||||
|
{
|
||||||
|
printf("top = ");
|
||||||
|
list.print_obj(&temp);
|
||||||
|
printf("\tsize after push = %2d\n", list.size(&list));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("pop failed! because stack is empty\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list.empty(&list))
|
||||||
|
{
|
||||||
|
printf("----- empty -----\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list.destory(&list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void list_test(void)
|
void list_test(void)
|
||||||
{
|
{
|
||||||
int32_t i = 0;
|
list_test_num();
|
||||||
list_data_t dat[10] = { 0,1,2,3,4,5,6,7,8,9 };
|
|
||||||
plist_t list;
|
|
||||||
if (!list_init(&list))
|
|
||||||
{
|
|
||||||
printf("list_init failureed!\n");
|
|
||||||
}
|
|
||||||
printf("list_init success!\n");
|
|
||||||
if (!list_empty(list))
|
|
||||||
{
|
|
||||||
printf("list is empty!\n");
|
|
||||||
}
|
|
||||||
for (i = 0; i < 10; i++)
|
|
||||||
{
|
|
||||||
list_insert_tail(list, dat[i]);
|
|
||||||
}
|
|
||||||
list_traversal_sequence(list, list_data_display);
|
|
||||||
printf("\nlist_traversal_sequence success!\n");
|
|
||||||
list_traversal_reversed(list, list_data_display);
|
|
||||||
printf("\nlist_traversal_reversed success!\n");
|
|
||||||
if (list_empty(list))
|
|
||||||
{
|
|
||||||
printf("list is not empty!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
list_clear(list);
|
|
||||||
printf("list_clear success\n");
|
|
||||||
for (i = 0; i < 10; i++)
|
|
||||||
{
|
|
||||||
list_insert_head(list, dat[i]);
|
|
||||||
}
|
|
||||||
if (!list_delete(list, 5))
|
|
||||||
{
|
|
||||||
printf("list_delete failureed!\n");
|
|
||||||
}
|
|
||||||
printf("list_delete success! Data5 has been deleted\n");
|
|
||||||
printf("list_count = %d\n", list_count(list));
|
|
||||||
|
|
||||||
list_traversal_sequence(list, list_data_display);
|
|
||||||
printf("\nlist_traversal_sequence success!\n");
|
|
||||||
list_traversal_reversed(list, list_data_display);
|
|
||||||
printf("\nlist_traversal_reversed success!\n");
|
|
||||||
|
|
||||||
list_destroy(&list);
|
|
||||||
printf("list_destroy success\n");
|
|
||||||
|
|
||||||
if (!list_insert_tail(list, dat[0]))
|
|
||||||
{
|
|
||||||
printf("list_insert_tail success\n");
|
|
||||||
}
|
|
||||||
if (!list_insert_head(list, dat[0]))
|
|
||||||
{
|
|
||||||
printf("list_insert_head success\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("----------------------------------------\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
@ -5,8 +5,8 @@ int main()
|
|||||||
{
|
{
|
||||||
// while (1)
|
// while (1)
|
||||||
{
|
{
|
||||||
// list_test();
|
list_test();
|
||||||
stack_test();
|
// stack_test();
|
||||||
// queue_test();
|
// queue_test();
|
||||||
// tree_test();
|
// tree_test();
|
||||||
// rbtree_test();
|
// rbtree_test();
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#include "stack.h"
|
#include "stack.h"
|
||||||
|
|
||||||
void print_num(void* obj)
|
static void print_num(void* obj)
|
||||||
{
|
{
|
||||||
printf("(%2d )", *(int*)obj);
|
printf("(%2d )", *(int*)obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void stack_test_num(void)
|
static void stack_test_num(void)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
int data[] = { 1,2,3,4,5,6,7,8,9,10 };
|
int data[] = { 1,2,3,4,5,6,7,8,9,10 };
|
||||||
@ -58,12 +58,12 @@ void stack_test_num(void)
|
|||||||
s.destory(&s);
|
s.destory(&s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_char(void* obj)
|
static void print_char(void* obj)
|
||||||
{
|
{
|
||||||
printf("(%2c )", *(char*)obj);
|
printf("(%2c )", *(char*)obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void stack_test_char(void)
|
static void stack_test_char(void)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
char data[] = "abcdefghijk";
|
char data[] = "abcdefghijk";
|
||||||
@ -122,13 +122,13 @@ struct _student
|
|||||||
int id;
|
int id;
|
||||||
};
|
};
|
||||||
|
|
||||||
void print_struct(void* obj)
|
static void print_struct(void* obj)
|
||||||
{
|
{
|
||||||
struct _student* student = (struct _student*)obj;
|
struct _student* student = (struct _student*)obj;
|
||||||
printf("(%2d:%-5s ) ", student->id, student->name);
|
printf("(%2d:%-5s ) ", student->id, student->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void stack_test_struct(void)
|
static void stack_test_struct(void)
|
||||||
{
|
{
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
struct _student data[] = {
|
struct _student data[] = {
|
||||||
|
Loading…
Reference in New Issue
Block a user