设为首页 加入收藏

TOP

栈的应用举例-进行算术运算
2015-07-24 07:07:57 来源: 作者: 【 】 浏览:54
Tags:应用 举例 进行 算术 运算

这个例子是来自于严蔚敏的《数据结构》的栈那一节。 但是我进行了一些简单的修改,确保编译通过。

目的:利用栈 计算 “3*(7-2)”这样的字符串的算术运算的结果。 共有3个代码文件,如下:

1、mystack.h

#pragma once


#define maxsize 30
typedef struct
{
	char data[maxsize+1];
    int top;
}Stack;

int Push(Stack& S,char x);
int Pop(Stack& S,char& x);
char readtop(Stack S);



2、mystack.cpp

#include "mystack.h"
#include "stdio.h"

int Push(Stack& S,char x)
{
	if (S.top==maxsize)
	{
		printf("overflow\n"); 
		return(0);
	}
	S.data[++S.top]=x; 
	return(1);
}

int Pop(Stack& S,char& x)
{
	if(S.top==0)
	{
		printf("undertflow\n");
		return(0);
	}
	x=S.data[S.top]; 
	S.top--;
	return(1);
}

char readtop(Stack S)
{
	char a;
          a=S.data[S.top]; 
	return(a);
}



3、 caclstack.cpp

#include 
  
   
#include 
   
     #include "mystack.h" using namespace std; double operate(char ch, double x,double y); int precede(char p1,char p2); double calcul(char a[]);
   
  
?
//这是进行测试的main 函数
int main()
{
	char tmp[]="3*(7-2)#";  // 输入的字符串一定要以# 结尾。
        // char tmp[]="3*(7-2)+5*2#";
	double rst = calcul(tmp);
	cout<
  
   '#' || readtop(S1)<>'#')
	while(r != '#' || readtop(S1) != '#')
	{
		if(r<='9' && r>='0')
		{ 
			x=0;
			while(r<='9' && r>='0')
			{
				x=x*10+r-'0';
				r=a[++I];
			}
			Push(S2,x);
		}
		else 
			switch(precede(readtop(S1),r))
		{
			case -1: 
				Push(S1,r); r=a[++I]; break; //把运算符放进栈1
			case 0:
				Pop(S1,ch); 
				r=a[++I];
				//r=a[I];
				break; //弹出一个运算符
			case 1: 
				Pop(S1, ch); Pop(S2, x1); Pop(S2, x2);
				Push(S2,operate(ch, x2,x1));
				//r=a[++I]; 
                 r=a[I];
				break;
		}
	}
	return(readtop(S2));
}

  


以上代码在VS 下编译通过,并且执行结果正确。

注意:本文的栈 是用的自定义 的mystack。

另外更多原理 请参考 严蔚敏的数据结构相关章节。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[数据结构] 二叉树的建立及其基本.. 下一篇hdu 2647 Reward

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: