链栈的实际应用(总结)

来源:互联网 发布:调查软件 编辑:程序博客网 时间: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


          

原创粉丝点击