今天在用c语言写一个栈,碰到不少问题,感觉到自己基础还是蛮差劲的,现在拿出来分享分享
程序结构是这样的
#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
#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 "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)
{
}