链栈的实际应用(总结)
来源:互联网 发布:调查软件 编辑:程序博客网 时间:2024/05/16 04:37
1 表达式求值在计算机中进行算术表达式的计算是通过栈来实现的。
(1) 算术表达式的三种表示:
中缀:——双目运算符出现在两个操作数中间, 例:a+b
前缀:——双目运算符出现在两个操作数前面, 例:+ab
后缀:——双目运算符出现在两个操作数后面, 例:ab+
(2) 三种表达式之间的转换:
按运算的优先次序全部加上括号,逐个括号写成另一种表示式
(括号—— * ,/—— +,- )
注意:操作数出现的顺序不变
关于栈如何实现计算器的功能,大家可以看我的另一篇文章:
http://blog.csdn.net/zhengxu001/article/details/8022085hdoj 1237 简单计算器(计算器应用)
2.栈在数制转换
十进制N和其它进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:
N=(n div d)*d+n mod d
( 其中:div为整除运算,mod为求余运算)
例如 (1348)10=(2504)8,其运算过程如下:
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
先入栈,再出栈
入栈顺序:4,0,5,2.
出栈顺序:2,5,0,4
所以 1348 = (2504)o
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);
}
}//conversion
3. 行编辑程序
接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入错误,并在发现有误时可以及时更正。
例如:用户发现输入错误时,输入”#”(退格符),以表示前一个字符无效; 输入”@”(退行符),表示当前输入的一行无效;
设一个栈接受输入,每输入一个字符,做如下判断:
是无效符,删除前一个入栈的符号
是退行符,删除前一行入栈的符号
其它,入栈
行编辑程序算法如下:
void LineEdit( ){
//利用字符栈S,从终端接收一行并传送至数据区
InitStack(S); //构造空栈
ch = getcher( ); //从终端接收第一个字符
while(ch!=EOF){//EOF为全文结束符
while(ch!=EOF && ch!=‘\n’){
switch(ch){
case ‘#’ : Pop(S,c);
//无效符, 出栈
case ‘@’ : ClearStack(S);
//退行符, 清空栈
default : Push(S,ch);
//其它,入栈
}
ch=getchar( );//从终端接收下一个字符
}//while
//将从栈底到栈顶的栈内字符传送至调用过程的数据区
ClearStack(S);
if(ch!=EOF)
ch=getchar( );
}
DestroyStack(S);
}//LindeEdit
- 链栈的实际应用(总结)
- 前端实际应用过程的问题总结
- SQL语句实际应用总结
- mysql数据库实际应用总结
- 一些关于HTML与CSS的总结与实际应用
- Java实际应用中经常遇到的"装饰模式"总结
- 栈和队列的实际应用
- 链表的实际应用1
- python的简单实际应用(一)
- SOA 的实际应用
- Filter的实际应用
- 反射的实际应用
- 门禁的实际应用
- CLHLock的实际应用
- MV5的实际应用
- ROW_NUMBER() 的实际应用
- ArrayList的实际应用
- AOP的实际应用
- 自动生成makefile
- 运用MATLAB绘制任意两点间的直线路径
- .NET 常用第三方组件
- Shannon-Fano编码——原理与实现
- Gridview显示图片和文字(二)
- 链栈的实际应用(总结)
- Windows Store apps开发[33]Part 1:使用Grid App (XAML)模板创建第一个Windows 8 app
- const的用法详解
- 写给想当程序员的朋友
- Hibernate对多表关联查询
- 2013笔试题--2012.9.22
- 我VC 下没有ActiveMovieControl Object?
- C语言札记之数据类型及其运算
- 在asp.net ajax 1.0 的updatePanel中如何实现文件下载