mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 23:56:54 +08:00
想把stack修改成通用的
This commit is contained in:
parent
fcce7a9202
commit
deb5ee1f59
@ -11,7 +11,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
// ---------------------------------------
|
||||
|
||||
#if RBTREE == 1
|
||||
#include "rbtree.h"
|
||||
typedef prbtree_node_t stack_data_t;
|
||||
@ -28,6 +28,5 @@
|
||||
typedef int list_data_t;
|
||||
#endif
|
||||
|
||||
|
||||
#endif // _DEMO_H_
|
||||
|
||||
|
@ -9,12 +9,12 @@
|
||||
|
||||
|
||||
// optional
|
||||
#define RBTREE 1
|
||||
#define RBTREE 0
|
||||
#define AVLTREE 0
|
||||
#define RAVLTREE 0 // avl tree by recursion
|
||||
#define QUEUE 1
|
||||
#define QUEUE 0
|
||||
#define STACK 1
|
||||
#define LIST 1
|
||||
#define LIST 0
|
||||
|
||||
|
||||
// --------------------------------------------------
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "common.h"
|
||||
|
||||
// #define LINK_LIST 1
|
||||
#define LIST 1
|
||||
// #define LIST 1
|
||||
|
||||
#ifdef LINK_LIST
|
||||
#define LIST_TEST
|
||||
|
@ -3,13 +3,11 @@
|
||||
|
||||
int main()
|
||||
{
|
||||
list_test();
|
||||
|
||||
// while (1)
|
||||
{
|
||||
//stack_test();
|
||||
//queue_test();
|
||||
// list_test();
|
||||
stack_test();
|
||||
// queue_test();
|
||||
// tree_test();
|
||||
// rbtree_test();
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
|
||||
#include "stack.h"
|
||||
|
||||
#if STACK == 1
|
||||
|
||||
#if STACK == 1
|
||||
#if 0
|
||||
bool stack_init(pstack_t *head)
|
||||
{
|
||||
*head = (pstack_t)malloc(sizeof(stack_t));
|
||||
@ -111,5 +112,69 @@ uint32_t stack_get_size(pstack_t head)
|
||||
{
|
||||
return head->size;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint32_t stack_capacity(struct _stack* s)
|
||||
{
|
||||
assert(s != NULL);
|
||||
return s->_capacity;
|
||||
}
|
||||
|
||||
uint32_t stack_size(struct _stack* s)
|
||||
{
|
||||
assert(s != NULL);
|
||||
return s->_size;
|
||||
}
|
||||
|
||||
bool stack_empty(struct _stack* s)
|
||||
{
|
||||
assert(s != NULL);
|
||||
return !stack_size(s);
|
||||
}
|
||||
|
||||
bool stack_clear(struct _stack* s)
|
||||
{
|
||||
assert(s != NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stack_peek(struct _stack* s, void* obj)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stack_push(struct _stack* s, void* obj)
|
||||
{
|
||||
assert(s != NULL);
|
||||
assert(obj != NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stack_pop(struct _stack* s, void* obj)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool stack_init(struct _stack* s, uint32_t obj_size)
|
||||
{
|
||||
// 1. set attr
|
||||
s->_obj_size = obj_size;
|
||||
s->_size = 0;
|
||||
// s->capacity = 64;
|
||||
|
||||
// 2. set function
|
||||
s->clear = stack_clear;
|
||||
s->empty = stack_empty;
|
||||
s->peek = stack_peek;
|
||||
s->pop = stack_pop;
|
||||
s->push = stack_push;
|
||||
s->size = stack_size;
|
||||
|
||||
// 3. set node
|
||||
s->_node->obj = NULL;
|
||||
s->_node->next = NULL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -5,30 +5,29 @@
|
||||
|
||||
#if STACK == 1
|
||||
|
||||
// typedef int stack_data_t;
|
||||
|
||||
typedef struct _stack_node_t
|
||||
struct _stack_node
|
||||
{
|
||||
stack_data_t data;
|
||||
struct _stack_node_t * next;
|
||||
} stack_node_t, *pstack_node_t;
|
||||
void * obj;
|
||||
struct _stack_node * next;
|
||||
};
|
||||
|
||||
typedef struct _stack_t
|
||||
struct _stack
|
||||
{
|
||||
struct _stack_node_t * top;
|
||||
uint32_t size;
|
||||
} stack_t, *pstack_t;
|
||||
struct _stack_node * _node;
|
||||
uint32_t _capacity; // 总容量
|
||||
uint32_t _size; // 栈大小
|
||||
uint32_t _obj_size; // 元素大小
|
||||
|
||||
bool (*empty)(struct _stack* s);
|
||||
bool (*clear)(struct _stack* s);
|
||||
uint32_t(*size)(struct _stack* s);
|
||||
|
||||
bool stack_init(pstack_t *head);
|
||||
void stack_destroy(pstack_t *head);
|
||||
bool stack_empty(pstack_t head);
|
||||
void stack_clear(pstack_t head);
|
||||
uint32_t stack_get_size(pstack_t head);
|
||||
bool (*peek)(struct _stack* s, void *obj);
|
||||
bool (*push)(struct _stack* s, void* obj);
|
||||
bool (*pop)(struct _stack* s, void* obj);
|
||||
};
|
||||
|
||||
bool stack_push(pstack_t head, stack_data_t data);
|
||||
void stack_pop(pstack_t head, stack_data_t *data);
|
||||
bool stack_get_top(pstack_t head, stack_data_t *data);
|
||||
bool stack_init(struct _stack* s, uint32_t type_size);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "common.h"
|
||||
|
||||
// It is recommended to keep one at the same time
|
||||
#define RBTREE_TEST 1
|
||||
#define RBTREE_TEST 0
|
||||
#define AVLTREE_TEST 0
|
||||
#define RAVLTRE_TEST 0
|
||||
#define STACK_TEST 0
|
||||
|
Loading…
Reference in New Issue
Block a user