• 数据结构-栈的实现之行编译器核心实现


    行编译器程序实现了接受用户从终端输入的数据,并存入用户的数据区。
    由于用户在终端输入的时候不能确保一字不差。所以,若在编辑过程中,输入一个字符就存入数据区是不完善的。行编译器的核心思想就是建立一个输入缓冲区,用作接受一行的数据。遇到#符号时前一个字符无效,遇到@符号时表示前面的字符均无效。确保了正确的输入。

    函数实现如下:(使用了前面写的栈的顺序实现头文件。并将里面的SElemType宏由int改为char)

     1 void LineEdit() 
     2 {
     3   //利用字符栈S,从终端接收一行并传送至调用过程的数据区。
     4   char ch,*temp;
     5   Stack S;
     6   InitStack(S);       //构造空栈S
     7   printf("请输入一行(#:退格;@:清行):
    ");
     8   ch = getchar();     //从终端接收第一个字符
     9   while (ch != EOF)  //EOF为全文结束符(stdio头文件下的宏定义值为(-1)输入Ctrl+Z的时候结束循环
    10   { 
    11     while (ch != EOF && ch != '
    ') 
    12     {
    13       switch (ch) 
    14       {
    15         case '#': 
    16             Pop(S, ch);    
    17             break;            // 仅当栈非空时退栈
    18         case '@':
    19             ClearStack(S);
    20             break;           // 重置S为空栈
    21         default :
    22             Push(S, ch);   
    23             break;            // 有效字符进栈,未考虑栈满情形
    24       }
    25       ch = getchar();  // 从终端接收下一个字符
    26     }    
    27     // 将从栈底到栈顶的栈内字符传送至调用过程的数据区;
    28     temp=S.base;  
    29     while(temp!=S.top) 
    30     {
    31       printf("%c",*temp);    //这里做控制台的输出;依情况讨论              
    32       ++temp;
    33     }
    34     //StackTraverse(S,Visit); //输出全部做测试
    35     ClearStack(S);      // 重置S为空栈
    36     printf("
    ");
    37     if (ch != EOF)
    38     {
    39       printf("请输入一行(#:退格;@:清行):
    ");
    40       ch = getchar();
    41     }
    42   }
    43   DestroyStack(S);
    44 }
  • 相关阅读:
    IO 模型
    进程、线程、锁
    用多线程,实现并发,TCP
    同步锁(互斥锁),GIL锁(解释器层面的锁),死锁与递归锁
    Java项目中的常用的异常2
    JAVA项目中的常用的异常处理情况1
    添加学生信息web界面连接数据库
    jdbc下载路径
    添加学生信息 web界面 并且连接数据库
    正则表达式
  • 原文地址:https://www.cnblogs.com/ABook/p/5420472.html
Copyright © 2020-2023  润新知