源码+注释
#include <malloc.h>
#include <stdio.h>
#define MAXSIZE 100
typedef enum {
FALSE,
TRUE
} boolean;
typedef int ElemType;
typedef struct {
ElemType *base;
ElemType *top;
int stackSize;
} SqStack;
boolean InitStack(SqStack *stack);
boolean IsEmpty(SqStack *stack);
boolean IsFull(SqStack *stack);
boolean Push(SqStack *stack, ElemType elem);
boolean Pop(SqStack *stack, ElemType *elem);
ElemType GetTop(SqStack *stack);
ElemType StackLen(SqStack *stack);
boolean ClearStack(SqStack *stack);
void DestroyStack(SqStack *stack);
int main() {
return 0;
}
boolean InitStack(SqStack *stack) {
stack->base = (ElemType *) malloc(sizeof(ElemType) * MAXSIZE);
if (!(stack->base)) {
return FALSE;
}
stack->top = stack->base;
stack->stackSize = MAXSIZE;
return TRUE;
}
boolean IsEmpty(SqStack *stack) {
return stack->top == stack->base;
}
boolean IsFull(SqStack *stack) {
return stack->top - stack->base == stack->stackSize;
}
boolean Push(SqStack *stack, ElemType elem) {
if (IsFull(stack)) {
return FALSE;
}
*stack->top++ = elem;
return TRUE;
}
boolean Pop(SqStack *stack, ElemType *elem) {
if (IsEmpty(stack)) {
return FALSE;
}
*elem = *--stack->top;
return TRUE;
}
ElemType GetTop(SqStack *stack) {
if (!(IsEmpty(stack))) {
return *(stack->top - 1);
}
}
ElemType StackLen(SqStack *stack) {
return stack->top - stack->base;
}
void DestroyStack(SqStack *stack) {
int i, len;
len = stack->stackSize;
for (i = 0; i < len; i++) {
free(stack->base);
stack->base++;
}
stack->base = stack->top = NULL;
stack->stackSize = 0;
}
boolean ClearStack(SqStack *stack) {
if (IsEmpty(stack)) {
return FALSE;
}
stack->top = stack->base;
return TRUE;
}