顺序栈
头文件
#define STACK_INIT_SIZE 10
#define STACKINCRENT 4
struct stack {
ElemType *base;//在构造
ElemType *top;//栈顶指针
int stacksize;
};//顺序栈
typedef struct stack Stack;
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define OVERFLOW -1
typedef int Status;
typedef char ElemType;
typedef int boolean;
file of methods
//构造一个空的栈
Status InitStack (Stack *stack) {
stack->base = (ElemType *)malloc (STACK_INIT_SIZE * sizeof(ElemType));
if (stack->base == NULL) {
exit (OVERFLOW);
}
stack->top = stack->base;
stack->stacksize = STACK_INIT_SIZE;
return OK;
}
//销毁栈
Status DestroyStack (Stack *stack) {
free (stack->base);
stack->base = NULL;
stack->top = NULL;
stack->stacksize = 0;
return OK;
}
//将栈置为空
Status ClearStack (Stack *stack) {
stack->top = stack->base;
return OK;
}
//判断栈是否为空
Status StackEmtpy (Stack *stack) {
if (stack->top == stack->base) {
return TRUE;
}else {
return FALSE;
}
}
//返回s的元素的个数,即使
int StackLength (Stack *const stack) {
return stack->top - stack->base;
}
//返回栈顶元素
Status GetTop (Stack *stack,ElemType *e) {
if (stack->base > stack->top) {
*e = *(--stack->top);
return OK;
}
return ERROR;
}
//入栈
Status Push (Stack *stack,ElemType e) {
ElemType *newElem;
if (stack->top - stack->base >= stack->stacksize - 1 ) {
newElem = (ElemType *)realloc (stack->base,(stack->stacksize + STACKINCRENT) *sizeof(ElemType));
if (!newElem) {
exit (OVERFLOW);
}else {
stack->base = newElem;
stack->top = stack->base + stack->stacksize - 1;
stack->stacksize = stack->stacksize + STACKINCRENT;
}
}
*(stack->top) = e;
stack->top++;
return OK;
}
//出栈
Status Pop (Stack *stack,ElemType *e) {
if (stack->top > stack->base) {
*e = *(--stack->top);
return OK;
}else {
return ERROR;
}
}
Status StackTraverse (Stack *stack,void (*visit)(ElemType)) {
ElemType *elem = stack->top;
while (elem != stack->base) {
elem--;
visit (*elem);
}
return OK;
}