代码拉取完成,页面将自动刷新
同步操作将从 徐南木/c_language_template 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/**
* 作者: 徐南木
* 说明: stack实现list和array两种容器(默认list)
* 编译器: mingw-w64
* 时间: 2020/3/13 9:30
* 详细注解: http://blog.xunanmu.com/2020/03/13/stack.h/
*/
#ifndef TEMPLATE_STACK_H
#define TEMPLATE_STACK_H
#include "template.h"
#define stack(T) T##_stack
#define __stack(T) T##_stack_node
/**************************************************************************/
#define STACK_TYPE_SET(T) \
typedef struct __stack(T) __stack(T); \
struct __stack(T) { \
__stack(T) *next; \
T data; \
}; \
\
typedef struct stack(T) stack(T); \
struct stack(T) { \
size_t (*length)(); \
\
bool (*empty)(); \
\
void (*push)(T data); \
\
T (*pop)(); \
\
T* (*top)(); \
\
void (*delete)(); \
} \
\
/**************************************************************************/
#define STACK_LIST_FUNCTION_BODY(T) \
size_t length_() { \
return length; \
} \
\
bool empty() { \
return length == 0; \
} \
\
void push(T data) { \
__stack(T) *node = NULL; \
MALLOC(node, __stack(T), 1); \
node->data = data; \
node->next = top; \
top = node; \
++length; \
} \
\
T pop() { \
UNDERFLOW \
T temp = top->data; \
__stack(T) *node = top->next; \
free(top); \
top = node; \
--length; \
return temp; \
} \
\
T* top_() { \
UNDERFLOW \
return &top->data; \
} \
\
void delete() { \
__stack(T) *node; \
while (top) { \
node = top->next; \
free(top); \
top = node; \
} \
length=0; \
} \
/**************************************************************************/
#define STACK_FUNCTION_assignmen \
this.length = length_; \
this.empty = empty; \
this.push = push; \
this.pop = pop; \
this.top = top_; \
this.delete = delete; \
/**************************************************************************/
/**************************************************************************/
#define STACK_Array_FUNCTION_BODY(T) \
size_t length_() \
{ \
return length; \
} \
bool empty() \
{ \
return length==0; \
} \
void push(T data) \
{ \
if (maxsize <= length) \
{ \
if( !REALLOC(top,T,maxsize+size_init)) \
exit(0); \
maxsize += size_init; \
} \
top[length++]=data; \
} \
T pop() \
{ \
UNDERFLOW \
return top[--length]; \
} \
T* top_() \
{ \
UNDERFLOW \
return &top[length-1]; \
} \
void delete() \
{ \
if (!top) \
{ \
free(top); \
top=NULL; \
length=maxsize=0; \
} \
} \
/**************************************************************************/
/**************************************************************************/
#define new_stack(T) \
({ \
size_t length = 0; \
__stack(T) *top = NULL; \
stack(T) this; \
STACK_LIST_FUNCTION_BODY(T) \
STACK_FUNCTION_assignmen \
this; \
}) \
/**************************************************************************/
#define new_stackArray(T) \
({ \
size_t length = 0; \
size_t maxsize = 0; \
T *top = NULL; \
stack(T) this; \
STACK_Array_FUNCTION_BODY(T) \
STACK_FUNCTION_assignmen \
this; \
}) \
/**************************************************************************/
#endif //TEMPLATE_STACK_H
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。