- 论坛徽章:
- 0
|
没写自动增加。。。反正也就是那么回事
- #include <stdlib.h>
- #define STACK_INIT_DECLARE(_stack_type_name)\
- int init(_stack_type_name*,int size);
- #define STACK_POP_DECLARE(_stack_type_name)\
- void pop(_stack_type_name*);
- #define STACK_PUSH_DECLARE( _elem_type, _stack_type_name) \
- int push( _elem_type , _stack_type_name*);
- #define STACK_GETVALUE_DECLARE( _elem_type, _stack_type_name) \
- void getvalue( _elem_type* , _stack_type_name*);
- #define STACK_DECLARE(_elem_type, _stack_type_name, _stack_name) \
- typedef _elem_type stack_elem_type; \
- struct _stack_type_name##_tag {_elem_type* data; \
- int pointer; int size; }; \
- typedef struct _stack_type_name##_tag _stack_type_name; \
- _stack_type_name _stack_name;\
- STACK_INIT_DECLARE(_stack_type_name)\
- STACK_POP_DECLARE(_stack_type_name)\
- STACK_PUSH_DECLARE(stack_elem_type, _stack_type_name)\
- STACK_GETVALUE_DECLARE(stack_elem_type, _stack_type_name)
- #define STACK_INIT_DEFINITION(_stack_type_name) \
- int init(_stack_type_name* stack_name,int size) { \
- stack_name->data = (stack_elem_type*)malloc(size*sizeof(stack_elem_type));\
- stack_name->pointer = 0;\
- stack_name->size = size;\
- return stack_name->data != NULL? 1:0; \
- }
- #define STACK_POP_DEFINITION(_stack_type_name) \
- void pop(_stack_type_name* stack_name) {\
- if ( stack_name->pointer > 0) stack_name->pointer--; \
- }
- #define STACK_PUSH_DEFINITION(_stack_type_name) \
- int push(stack_elem_type value, _stack_type_name* stack_name) { \
- if ( stack_name->pointer == stack_name->size ) { \
- return 0; } \
- stack_name->data[stack_name->pointer++] = value; \
- return 1; \
- }
-
- #define STACK_GETVALUE_DEFINITION(_stack_type_name) \
- void getvalue(stack_elem_type* getvalue, _stack_type_name* stack_name) {\
- if ( stack_name->pointer >0 ) *(getvalue) = stack_name->data[stack_name->pointer-1]; \
- }
- #define STACK_DESTROY_DEFINITION(_stack_type_name) \
- void destroy(_stack_type_name* stack_name) { \
- free(stack_name->data); \
- }
- #define STACK_DEFINITION(_stack_type_name) \
- STACK_INIT_DEFINITION(_stack_type_name) \
- STACK_POP_DEFINITION(_stack_type_name) \
- STACK_PUSH_DEFINITION( _stack_type_name) \
- STACK_GETVALUE_DEFINITION(_stack_type_name) \
- STACK_DESTROY_DEFINITION(_stack_type_name)
- #define INIT(_stack_name, _size) \
- init(&_stack_name, _size);
- #define POP(_stack_name) \
- pop(&_stack_name);
- #define PUSH(_elem_value, _stack_name) \
- push(_elem_value, &_stack_name);
- #define GETVALUE(_elem_value, _stack_name) \
- getvalue(&_elem_value, &_stack_name);
- #define DESTROY(_stack_name) \
- destroy(_stack_name);
复制代码
- #include "stack.h"
- STACK_DECLARE(int, int_stack, stack)
- STACK_DEFINITION(int_stack)
- int main(void)
- {
- int a;
-
- INIT(stack, 10)
- PUSH(1, stack)
- POP(stack)
- PUSH(2, stack)
- GETVALUE(a, stack)
- return 0;
- }
复制代码
[ 本帖最后由 hellhell 于 2006-3-28 16:57 编辑 ] |
|