2.2栈

头文件 SeqStack.h:

#include<iostream>
using namespace std;
#define MAXSIZE 100
typedef double DataType;
typedef struct
{
	DataType data[MAXSIZE];
	int top;
}SeqStack,*PSeqStack;

//初始化栈
PSeqStack Init_SeqStack(void)
{
	PSeqStack S;
	S=(PSeqStack)malloc(sizeof(SeqStack));
	if(S)
	{
		S->top=-1;
	}
	return S;
}

//判断栈空(是否有元素)
int Empty_SeqStack(PSeqStack S)
{
	if(S->top==-1)
		return 1;
	else
		return 0;
}

//入栈(在栈顶插入元素)
int Push_SeqStack(PSeqStack S,double x)
{
	if(S->top==MAXSIZE-1)
		return 0;
	else
	{
		S->top++;
		S->data[S->top]=x;
		return 1;
	}
}

//出栈(删除顶部元素)
int Pop_SeqStack(PSeqStack S,double *x)
{
	if(Empty_SeqStack(S))
		return 0;
	else
	{
		*x=S->data[S->top];
		S->top--;
		return 1;
	}
}

//取栈顶元素(不删除)
int GetTop_SeqStack(PSeqStack S,double *x)
{
	if(Empty_SeqStack(S))
		return 0;
	else
	{
		*x=S->data[S->top];
		return 1;
	}
}
 
//销毁栈
void Destroy_SeqStack(PSeqStack *S)
{
	if(*S)
		free(*S);
	*S=NULL;
	return ;
}


后缀表达式计算 源文件:

#include<iostream>
#include"SeqStack.h"
using namespace std;
typedef double DataType;
int IsNum(char c)//判断字符是否为操作数
{
	if(c>='0'&&c<='9')
		return 1;
	else 
		return 0;
}
double postfix_exp(char *A)//本函数返回由后缀表达式表示的运算结果
{
	PSeqStack S;//栈中存储操作数
	double Result,a,b,c;
	char ch;
	ch=*A++;
	S=Init_SeqStack();//初始化栈
	while(ch!='#')
	{
		if(IsNum(ch)) Push_SeqStack(S,ch-'0');
		else
		{
			Pop_SeqStack(S,&b);
			Pop_SeqStack(S,&a);
			switch(ch)
			{
			    case '+':c=a+b;break;
				case '-':c=a-b;break;
				case '*':c=a*b;break;
				case '/':c=a/b;break;
				    //case '%':c=(int)a%(int)b;break;
					//case '^':c=pow(a,b);break;
			}
			Push_SeqStack(S,c);
		}
		ch=*A++;
	}
	GetTop_SeqStack(S,&Result);
	Destroy_SeqStack(&S);
	return Result;	
}

int main()
{
	PSeqStack S;
	S=Init_SeqStack();
    Destroy_SeqStack(&S);
    cout<<postfix_exp("1285-*+42/-#");//5
	return 0;
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值