#define __SQSTACK_H__
#define FALSE 0
#define TRUE 1
#define SIZE 10
#include "error.h"
typedef int StackData;
typedef struct _stack
{
StackData data[SIZE];
int top;
}Stack;
int Init_Stack(Stack *s);
int StackEmpty (Stack *s);
int StackFull (Stack *s);
int Push (Stack *s, StackData x);
int Pop (Stack *s, StackData *x);
#endif //__SQSTACK_H__
#include "SqStack.h"
#include <stdio.h>
int Init_Stack(Stack *s)
{
if(s == NULL)
{
errno = ERROR;
return FALSE;
}
s->top = -1;
return TRUE;
}
int StackEmpty (Stack *s)
{
if(s == NULL)
{
errno = ERROR;
myError("StackEmpty");
return FALSE;
}
return (s->top == -1);
}
int StackFull (Stack *s)
{
if(s == NULL)
{
errno = ERROR;
myError("StackFull");
return FALSE;
}
return (s->top == SIZE-1);
}
int Push (Stack *s, StackData x)
{
if(s == NULL)
{
errno = ERROR;
return FALSE;
}
if(StackFull(s))
{
errno = FULL_STACK;
return FALSE;
}
s->data[++s->top] = x;
return TRUE;
}
int Pop (Stack *s, StackData *x)
{
if(s == NULL)
{
errno = ERROR;
return FALSE;
}
if(StackEmpty(s))
{
errno = EMPTY_STACK;
return FALSE;
}
*x = s->data[s->top--];
return TRUE;
}
#include <stdio.h>
#include "SqStack.h"
int main()
{
Stack s;
if(Init_Stack(&s) == FALSE)
{
printf("错误号:%d\n",ERROR);
myError("Init_Stack");
return FALSE;
}
if(StackEmpty(&s))
printf("空栈\n");
if(StackFull(&s))
printf("满栈\n");
int i,x;
char str[100];
for(i=0; i<12; i++)
{
if(Push(&s, i)==FALSE)
{
sprintf(str,"Push第%d个元素",i);
myError(str);
}
}
for(i=0; i<10; i++)
{
if(Pop(&s, &x)==FALSE)
{
sprintf(str,"Pop第%d个元素",i);
myError(str);
}
printf("x : %d\n",x);
}
return 0;
}