栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构栈的应用:中缀转后缀表达

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构栈的应用:中缀转后缀表达

数据结构栈的应用:中缀转后缀表达

利用栈的先入后出思想:

中缀转后缀表达 思路:对这种数据进行处理时需对表达式进行加上括号
1.仍然从左至右来处理数据    
2.当遇到左括号时,忽略它
3.当遇到数值时,直接输出
4.当遇到操作符时,将操作符入栈
5.当遇到右括号时,出栈顶的操作符
    例1.(1+4)*(5+8)
    	14+58+*
  
    例2. 1+4*5*8
         14+5*8* 这种转换即为错误的

//数据结构之栈的应用:中缀转后缀 C实现:

//数据结构之栈的应用:中缀转后缀
//@输入:((1+8)*(8*2)*8)
//@输出:18+82*8*
//@输入:((1+8)*(8+2))
//@输出:18+82+*
//注 本函数需要严格按照给定格式输入 最外层要添加括号 不然会输出错误
#include
#include

int stack[512];		//存放栈的数据
int top = 0;		//指向栈顶的指针

void push(char c);	//入栈操作
int pop(void);		//出栈操作
int is_empty(void);	//检测栈是否为空
void postfix(void);	//将中缀转为后缀实现函数

int main(void) {
	postfix();
	return 0;
}

//入栈操作
void push(char c) {
	stack[top++] = c;
}

//出栈操作
int pop(void) {
	return stack[--top];
}

//检测栈是否为空
int is_empty(void) {
	return top == 0;
}

//将中缀转为后缀实现函数

void postfix(void) {
	char str[100];	//存储输入的表达式
	int  len;

	printf("请输入表达式:n");
	gets(str);

	len = strlen(str);

	for (int i = 0; i < len; i++) {	//1.从左到右处理数据
		if (str[i] == '(')  		//2.遇到左括号时,忽略它
			continue;				//直接将这个语句跳过
		else if (str[i] >= '0' && str[i] <=  '9' )	//3.遇到数值时,直接输出
			printf("%c", str[i]);
		else if ((str[i] == '+') || (str[i] == '-') || (str[i] == '*')) //逻辑与有一个为真即为真
			push(str[i]);			//4.当遇到操作符时将操作符入栈
		else if (str[i] == ')')		//5.当遇到右括号时,出栈顶的操作符
			printf("%c", pop());
	}
}

无注释版本:

#include 
#include 

char stack[512];
int top = 0;

void push(char c);
char pop(void);
int is_empty(void);

int main(void) {
	char str[100];
	int i, len;

	printf("Please enter a calcuate expression:");
	gets(str);

	len = strlen(str);

	for (i = 0; i < len; i++) {
		if (str[i] == '(')
			continue;
		else if ((str[i] >= '0') && (str[i] <= '9'))
			printf("%c", str[i]);
		else if ((str[i] == '+') || (str[i] == '-') || (str[i] == '*'))
			push(str[i]);
		else if (str[i] == ')')
			printf("%c", pop());
	}
	printf("n");

	return 0;
}

void push(char c) {
	stack[top++] = c;
}

char pop(void) {
	return stack[--top];
}

int is_empty(void) {
	return top == 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号