今天在用c语言写一个栈,碰到不少问题,感觉到自己基础还是蛮差劲的,现在拿出来分享分享 程序结构是这样的 baseData.h #ifndef BASE_DATA_H #define BASE_DATA_H typedef int Status; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #endif SqStack.h #include "baseData.h" #ifndef MY_STACK #define MY_STACK #define STACK_INIT_SIZE 20; #define STACKINCREMENT 10; typedef int sqStackElemType; typedef struct { sqStackElemType *base; sqStackElemType *top; int stackSize; }sqlStack; Status initStack(sqlStack * p); Status destroyStack(sqlStack *p); Status clearStack(sqlStack *p); Status stackEmpty(sqlStack p); Status stackLength(sqlStack p); sqStackElemType getStackTop(sqlStack *p); sqStackElemType pop(sqlStack *p); Status push(sqlStack *p,sqStackElemType e); #endif #include <stdio.h> #include <stdlib.h> #include "sqStack.h" Status initStack(sqlStack *sp) { int initsize = sizeof(sqStackElemType)*STACK_INIT_SIZE; (*sp).base =(sqStackElemType *) malloc(initsize); //为顺序栈分配初始存储空间,大小为20单位 if(!(*sp).base) return ERROR; //检查分配是否成功 (*sp).top = (*sp).base; //初始时栈顶与栈底都指向同一位置,栈底 (*sp).stackSize = STACK_INIT_SIZE; //将初始分配大小存储 return OK; } sqStackElemType getTop(sqlStack p) { if(p.top == p.base) return ERROR; return *((p.top)-1); } sqStackElemType pop(sqlStack *p) { if((*p).base == (*p).top) return ERROR; return *(--((*p).top)); } Status push(sqlStack *p,sqStackElemType e) { }