#include<iostream>
#include<stdlib.h>
#include<string>
#define Stackmax 100//栈的初始大小
#define Stackadd 10//栈的增加的大小
using namespace std;
typedef int Elemtype;
typedef int Status;
typedef struct{
Elemtype *top;
Elemtype *base;
int stacksize;
}Stack;
Status Initstack(Stack &S)//初始化stack
{
S.base=(Elemtype*)malloc(Stackmax*sizeof(Elemtype));
if(!S.base)
exit(0);
S.top=S.base;
S.stacksize=Stackmax;
return 0;
}
Status Destorystack(Stack &S)//销毁一个栈
{
int len,i;
len=S.stacksize;
for(i=0;i<len;i++)
{
free(S.base);
S.base++;
}
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return 0;
}
Status Clearstack(Stack &S)//清空栈
{
S.top=S.base;
S.stacksize=0;
return 0;
}
Status Stackempty(Stack S)//判断栈是否为空
{
return (S.base=S.top)?true:false;
}
Status Stacklength(Stack S)//返回栈的长度
{
return S.top-S.base;
}
Status Gettop(Stack S,Elemtype &e)//取栈顶元素
{
if(S.top==S.base)
return 1;
S.top--;
e=*(S.top);
return 0;
}
Status Push(Stack &S,Elemtype e)//入栈
{
if(S.top-S.base>=S.stacksize)
S.base=(Elemtype*)realloc(S.base,(S.stacksize+Stackadd)*sizeof(Elemtype));
if(!S.base)
exit(0);
S.top=S.base+S.stacksize;
S.stacksize=Stackmax+Stackadd;//S.top的值不能变,并且让S.top直向新栈。
*(S.top)=e;
S.top++;
return 0;
}
Status Pop(Stack &S,Elemtype &e)//出栈
{
if(S.top==S.base)
return 1;
S.top--;
e=*(S.top);
return e;
}
Status Stacktraverse(Stack S)//栈的遍历
{
int len,i;
len=S.top-S.base;
for(i=0;i<len;i++)
{
cout<<S.base<<" ";
S.base++;
}
return 0;
}
int main()
{
string line;
Stack S;
int linesize;
char a;
int i,e;
while(getline(cin,line))
{
linesize=line.length();
for(i=0;i<linesize;i++)
{
Push(S,line[i]);
}
while(S.top!=S.base)
{
a=Pop(S,e);
cout<<a<<" ";
}
}
return 0;
}
栈 栈 栈
最新推荐文章于 2024-07-23 16:53:03 发布