①、棧的定義 [cpp] { void **base; /* 棧底 */ void **top; /* 棧頂 */ int size; /* 棧的大小 */ }stack_t; 在此設計的通用棧將會達到以下兩點要求: ①、可以處理任意的數據類型的數據 請注意棧中base和top的數據類型,其為void**,因此其可以處理各種數據類型 ②、高效的數據操作和訪問 void**其為雙指針,意味入棧和出棧的將只是對應數據的地址,而不需要對數據本身進行拷貝,因此也達到了高效的目的。 ②、宏定義 為提高棧的操作訪問效率,可使用宏定義: [cpp] #define stack_maxsize(stack) (stack->size) #define stack_isempty(stack) (stack->top == stack->base) #define stack_depth(stack) (stack->top - stack->base) #define stack_gettop(stack) ((stack->top == stack->base)? NULL: *(stack->top - 1)) ③、操作接口 [cpp] /* 棧的初始化 */ int stack_init(stack_t *stack, int size) { memset(stack, 0, sizeof(stack_t)); stack->base = (void**)calloc(size, sizeof(void*)); if(NULL == stack->base) { return -1; } stack->top = stack->base; stack->size = size; return 0; } [cpp] /* 入棧 */ int stack_push(stack_t *stack, void *node) { if(stack->top - stack->base >= stack->szie) { return -1; } *(stack->top) = node; stack->top++; return 0; } [html] /* 出棧 */ int stack_top(stack *stack) { if(stack->top == stack->base) { return -1; } stack->top--; *(stack->top) = NULL; return 0; } [cpp] /* 釋放棧 */ void stack_free(stack_t *stack) { free(stack->base); stack->base = NULL; stack->top = NULL; stack->size = 0; }