用数组实现顺序栈
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 10
#define STACK_INCREMENT 2
#define OVERFLOW -2
typedef int elemType;
struct sqStack
{
elemType * data;
int top;
int stacksize;
};
void initStack(sqStack &s)
{
s.data = (elemType *)malloc(sizeof(elemType) * STACK_INIT_SIZE);
if(!s.data)
{
exit(OVERFLOW);
}
s.top = 0;
s.stacksize = STACK_INIT_SIZE;
}
void destroyStack(sqStack &s)
{
free(s.data);
s.top = 0;
s.stacksize = 0;
}
void clearStack(sqStack &s)
{
s.top = 0;
}
bool stackEmpty(sqStack s)
{
if(s.top == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
int stackLength(sqStack s)
{
return s.top;
}
bool getTop(sqStack s, elemType &e)
{
if(s.top > 0)
{
e = s.data[s.top - 1];
return TRUE;
}
else
{
return FALSE;
}
}
void push(sqStack &s, elemType e)
{
if(s.top + 1 == s.stacksize)
{
s.data = (elemType *)realloc(s.data, (s.stacksize + STACK_INCREMENT) * sizeof(elemType));
if(!s.data)
exit(OVERFLOW);
s.stacksize += STACK_INCREMENT;
}
s.data[s.top] = e;
s.top++;
}
bool pop(sqStack &s, elemType &e)
{
if(s.top == 0)
{
return FALSE;
}
e = s.data[--s.top];
return TRUE;
}
void stackTraverse(sqStack s, void(* visit)(elemType))
{
for(int i = 0; i < s.top; i++)
{
visit(s.data[i]);
}
}
void visit(elemType e)
{
printf("%d ", e);
}
int main(void)
{
sqStack s;
elemType e;
initStack(s);
for(int i=0; i<13; i++)
{
push(s, i*10);
}
printf("The elements are:");
stackTraverse(s, visit);
pop(s, e);
printf("\npop element is: %d", e);
printf("\nif the stack is null? %d", stackEmpty(s));
getTop(s, e);
printf("\nstack top element is:%d, the stack length is:%d", e, stackLength(s));
clearStack(s);
printf("\nif the stack is null? %d", stackEmpty(s));
destroyStack(s);
printf("\nafter destory, s.top = %d, s.data = %u, s.stacksize = %d", s.top, s.data, s.stacksize);
return 0;
}