栈的实现
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
#define OVERFLOW -2
#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType* base;
SElemType* top;
int stacksize;
} SqStack;
Status InitStack(SqStack& S)
{
S.base = (SElemType*)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
Status GetTop(SqStack& S, SElemType& e)
{
if (S.top == S.base)
{
return ERROR;
}
e = *(S.top - 1);
return OK;
}
Status Push(SqStack& S, SElemType e)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType*)realloc(S.base, (S.stacksize + STACK_INCREMENT)
* sizeof(SElemType));
if (!S.base) exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACK_INCREMENT;
}
*S.top++ = e;
return OK;
}
Status Pop(SqStack& S, SElemType& e)
{
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
Status IsEmpty(SqStack& S)
{
if (S.base == S.top)
return TRUE;
return FALSE;
}
void ClearStack(SqStack& S)
{
free(S.base);
S.base = NULL;
S.top = S.base;
}
int main()
{
SqStack S;
InitStack(S);
Push(S, 1);
Push(S, 2);
Push(S, 3);
SElemType e1;
GetTop(S, e1);
if (Pop(S, e1) == 1)
printf("%d \n", e1);
SElemType e2;
GetTop(S, e2);
if (Pop(S, e2) == 1)
printf("%d \n", e2);
SElemType e3;
GetTop(S, e3);
if (Pop(S, e3) == 1)
printf("%d \n", e3);
SElemType e4;
if (Pop(S, e4) == 1)
printf("%d \n", e4);
ClearStack(S);
return 0;
}