栈操作也是我们日常生活中常见的例子, 请同学们用栈操作来实现一组有序数据的倒排输出问题.例如, 已有有序数据为:1,2,3,4,5,6,7, 我们需要用栈操作的先进后出的特性来实现它们的倒排输出,即7,6,5,4,3,2,1.
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef int CElemType;
typedef struct SqStack
{
CElemType *base; //栈底
CElemType *top; //栈顶
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base = (CElemType*)malloc(sizeof(CElemType)*STACK_INIT_SIZE);
if (!S.base)
exit(OVERFLOW);
S.stacksize = STACK_INIT_SIZE;
S.top = S.base;
return OK;
}
Status Push(SqStack &S, CElemType e)
{
if (*S.top - *S.base >= STACK_INIT_SIZE)//检查内存是否不够
{
S.base = (CElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(CElemType));
if (!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top=e; //压入栈顶
S.top++;//栈顶指针上移
return OK;
}
Status Pop(SqStack &S, CElemType &e)//出栈
{
if (S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
int main()
{
SqStack S;
InitStack(S);
for(int i=1;i<8;i++)
Push(S,i);
for(int i=1;i<8;i++)//倒置
{
int e;
Pop(S,e);
printf("%d\n",e);
}
return OK;
}