栈 栈 栈

#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;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值