stack.h #ifndef _STACK_H #define _STACK_H #include "data.h" #define STACK_INIT_SIZE 10 #define STACK_INCREMENT 10 typedef struct{ Elemtype* top; Elemtype* base; int size; }STACK; STACK* stack_init(); void stack_destory(STACK* stack); int push(STACK* stack, Elemtype* elem); int pop(STACK* stack, Elemtype* elem); int stack_isempty(STACK* stack); #endif stack.c #include "stack.h" #include <stdio.h> #include <stdlib.h> /* 栈初始化 */ STACK* stack_init() { STACK* s = (STACK*)malloc(sizeof(STACK)); if(s == NULL) { exit(0); } s->base = (Elemtype*)malloc(STACK_INIT_SIZE * sizeof(Elemtype)); if(s->base == NULL) { exit(0); } s->top = s->base; s->size = STACK_INIT_SIZE; return s; } /* 销毁栈 */ void stack_destory(STACK* stack) { free(stack->base); free(stack); } /* 压栈 */ int push(STACK* stack, Elemtype* elem) { if(stack == NULL || elem == NULL) { return 0; } if(stack->top - stack->base >= stack->size) { stack->base = (Elemtype*)realloc(stack->base, (stack->size + STACK_INCREMENT) * sizeof(Elemtype)); stack->top = stack->base + stack->size; stack->size += STACK_INCREMENT; } *stack->top++ = *elem; return 1; } /* 出栈*/ int pop(STACK* stack, Elemtype* elem) { if(stack == NULL || elem == NULL) { return 0; } if(stack->base == stack->top) { return 0; } *elem = *--stack->top; return 1; } /* 判断栈是否为空 */ int stack_isempty(STACK* stack) { return stack->base == stack->top ? 1 : 0; } data.h #ifndef _DATA_H #define _DATA_H typedef int Elemtype; #endif main.c #include "stack.h" #include <stdio.h> int main(int argc, char* argv[]) { /* 10进制数转换为8进制数 */ int i = 1348, temp; STACK* stack = stack_init(); while(i) { temp = i % 8; push(stack, &temp); i = i / 8; } while(!stack_isempty(stack)) { pop(stack, &temp); printf("%d",temp); } printf("/n"); stack_destory(stack); return 0; }