ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据结构期末考前复习(8)

2021-12-17 22:30:22  阅读:144  来源: 互联网

标签:期末考 GetTop 复习 OPND Pop 运算符 theta 数据结构 OPTR


栈与队列

栈的应用举例

1.数制转换

//对于输入任意一个非负十进制整数,打印输出与其等值的八进制数
void conversion()
{
	InitStack(S);
	scanf("%d",N);
	while(N)
	{
		Push(S,N%8);
		N=N/8;
	}
	while(!StackEmpty(S))
	{
		Pop(S,e);
		printf("%d",e);
	}
} 

2.表达式求值

三个原则:

(1)先乘除后加减

(2)从左算到右

(3)先括号内后括号外

为实现算符优先算法,可以使用两个工作栈。一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。#为表达式起始符和结束符,作栈底元素。

OperandType EvaluteExpression()
//算术表达式求值的算符优先算法.
//设OPTR、OPND分别为运算符栈和运算数栈 
//OP为运算符集合 
{
	InitStack(OPTR); push(OPTR,'#');
	InitStack(OPND); 
	c=getchar();		
	while(c!='#'||GetTop(OPTR)!='#')
	{
		if(!In(c,OP))//判断不是运算符则进栈OPND 
		{
			Push(OPND,c);
			c=getchar;	
		}
		else
			switch(Precede(GetTop(OPTR),c))
			//precede,判断栈顶符号与输入符号优先级顺序 
			{
				case'<'://栈顶元素优先级低
					Push(OPTR,c);c=getchar();break;
				case'=':
				//脱括号并接收下一运算符(只有’(‘’)‘和’#‘’#‘比较时为’=‘) 
					Pop(OPTR,x);c=getchar();break;
				case'>'//退栈并将运算结果入栈
					Pop(OPTR,theta);
					Pop(OPND,b); Pop(OPND,a);
					Push(OPND,Operate(a,theta,b));//运算 a theta b(eg:1+2) 
					break; 	
			}	
	}
	return GetTop(OPND); 
} 

标签:期末考,GetTop,复习,OPND,Pop,运算符,theta,数据结构,OPTR
来源: https://blog.csdn.net/shcolinia/article/details/122001287

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有