数据结构笔记(七)

栈的应用

               行编辑程序,一个输入缓冲区,可以接受用户输入的一行字符,并允许改错

void LineEdit(){
    InitStack(s);                                            //构造栈s
    ch=getchar();
    while(ch!=EOF){                                         //EOF文件结束符
       while(ch!=EOF&&ch!='\n'){
            switch(ch){
                case '#': pop(s,ch);        break;
                case '@': clearStack(s);    break;
                default : push(s,ch);       break;
                      }
             ch=getchar();
                }
       clearStack(s);
       if(ch!=EOF)    ch=getchar();
      }
    destroryStack(s);
}

                迷宫求解

typedef struct{
    int       ord;//通道块在路径上的“序号”
    PosType   seat;//通道块在迷宫中的“坐标位置”
    int       di;    //从此通道块走向下一通道块的方向
}SElemType;

Status MazePath(MazeType mze,PosType start,PosType end){
    InitStack(S);    curpos=start;    //设定当前位置为入口位置
    curstep=1;                        //探索第一步
    do{        
        if(pass(curpos)){             //当前位置可以通过,即未曾到过的通道块
            footPrint(curois);        //留下足迹
            e=(curstep,curpos,1);    
            push(s,e);                //加入路径
            if(curpos==end) retur true;//到达终点
            curpos=nextPos(curpos,1);  //下一位置是当前位置的相邻
            curstep++;                 //探索下一步
            }
        else{
            if(!stcakEmpty(s)){
                pop(s,e);
                while(e.di==4&&!stackEmpty(s)){
                    markPrint(e.seat);    pop(s,e);        //留下不能通过的标记,并退回一步
                   }
                if(e.di<4){
                        e.di++;    push(s,e);
                        curpos=nextPos(e.seat,e.di);      //设定当前位置是新方向上的相邻块
                        }
                    }
                }
           }while(!stackEmpty(s));
    return false;
}
                        

                 表达式求值

 

OperandType EvaluateExpression(){
    InitStack(OPYR); push(OPTR,'#');    //OPTR运算符栈OPND运算数栈
    InitStack(OPND); c=getchar();
    while(c!='#'||getTop(OPTR)!='#'){
        if(!stackElem(OPTR,c)) {push(OPND,c);c=getchar();}
        else
            switch(precede(getTop(OPTR),c)){
                    case '<': push(OPTR,c);c=getchar();break;//栈顶元素优先级低
                    case '=': pop(OPTR,t); c=getchar();break;//脱括号接收下一字符
                    case '>':                                //将计算结果入栈
                pop(OPTR,theta);pop(OPND,b);pop(OPND,a);push(OPND,Operate(a,theta,b);break;
                }
           }
    return getTop(OPND);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值