栈的基本操作如下:
typedef int status;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
# define OK 1
# define ERROR
Status InitStack(SqStack &S) ;
Status DestoryStack(SqStack &S) ;
Status ClearStack(SqStack &S) ;
Status StackLength(SqStack S) ;
Status GetTop(SqStack S,SElemType &e) ;
Status Push(SqStack &S,SElemType &e) ;
Status Pop(SqStack &S,SElemType &e) ;
Status InitStack(SqStack &S);
{
S.base = (SElemType *)malloc(sizeof (SElemType)*STACK_INIT_SIZE);
if (!S.base )
exit(ERRORFLOW);
S.top = S.base ;
S.stacksize = STACKINCREMENT;
return OK;
}
Status DestoryStack(SqStack &S);
{
S.top = S.base = NULL;
return OK;
}
Status ClearStack(SqStack &S);
{
S.top = S.base ;
stacksize = 0 ;
}
Status StackLength(SqStack S);
{
return stacksize;
}
Status Push(SqStack &S,SElemType &e);
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType *)relloc(S.base ,(S.stacksize+STACKINCREMENT)*sizeof (ElemType));
if (!S.base )
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize = S.stacksize + STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
Status Push(SqStack &S,SElemType &e);
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType *)relloc(S.base ,(S.stacksize+STACKINCREMENT)*sizeof (ElemType));
if (!S.base )
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize = S.stacksize + STACKINCREMENT;
}
*S.top++ = e;
return OK;
Status Pop(SqStack &S,SElemType &e);
{
if (S.base == S.top)
return ERROR;
e = *--S.top;
return OK;
}
int main(void )
{
SqStack S;
InitStack(&S);
int choice;
SElemType e;
while (1 )
{
printf ("*************************************************\n" );
printf ("*[1]栈的长度 [2]栈顶插入新元素 *\n" );
printf ("*[3]将栈S清空 [4]销毁栈S *\n" );
printf ("*[5]退栈并返回其值 [6]获得栈顶元素 *\n" );
printf ("* [0]退出 *\n" );
printf ("*************************************************\n" );
scanf ("%d" ,&choice);
switch (choice)
{
case 0 : break ;
case 1 : StackLength(S);break ;
case 2 : scanf ("%d" ,&e);Push(&S,e);break ;
case 3 : ClearStack(&S);break ;
case 4 : DestoryStack(&S);break ;
case 5 : Pop(&S,e);break ;
case 6 : GetTop(s,e);break ;
}
}
return 0 ;
}