#include<iostream>
#include<stdlib.h>
using namespace std;
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//建立一个空栈;
Status GetTop(SqStack S,int &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}//若栈不空,用e返回栈顶元素
Status Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//插入元素e为新的栈顶元素
void prit_(SqStack S)
{
for(;S.base!=S.top;)
cout<<*(--S.top)<<' ';
cout<<endl;
}//从栈顶输出栈的全部元素
Status Pop(SqStack &S,int &e)
{
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR;
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
void DestroyStack(SqStack &S)
{
//销毁栈
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
}
void ClearStack(SqStack &S)
{
//将栈清空
S.top=S.base;
S.stacksize=0;
}
Status stackLength(SqStack &S)
{
//返回栈的长度
return S.top-S.base;
}
int main()
{
SqStack str;
if(InitStack(str)!=1) cout<<"建立栈失败"<<endl;
int c,n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>c;
if(Push(str,c)!=1) cout<<"存储失败"<<endl;
}
prit_(str);
cout<<stackLength(str)<<endl;
return 0;
#include<stdlib.h>
using namespace std;
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//建立一个空栈;
Status GetTop(SqStack S,int &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}//若栈不空,用e返回栈顶元素
Status Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//插入元素e为新的栈顶元素
void prit_(SqStack S)
{
for(;S.base!=S.top;)
cout<<*(--S.top)<<' ';
cout<<endl;
}//从栈顶输出栈的全部元素
Status Pop(SqStack &S,int &e)
{
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR;
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}
void DestroyStack(SqStack &S)
{
//销毁栈
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
}
void ClearStack(SqStack &S)
{
//将栈清空
S.top=S.base;
S.stacksize=0;
}
Status stackLength(SqStack &S)
{
//返回栈的长度
return S.top-S.base;
}
int main()
{
SqStack str;
if(InitStack(str)!=1) cout<<"建立栈失败"<<endl;
int c,n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>c;
if(Push(str,c)!=1) cout<<"存储失败"<<endl;
}
prit_(str);
cout<<stackLength(str)<<endl;
return 0;
}