阅读以下说明和c语言函数。 [说明] 函数bool Del_elem(STACK*s,char para_ch)的功能是:删除栈*s中与para ch之值相等且最接近栈顶的元素(字符),若栈中不存在该元素,则函数返回 FALSE,否则返回 TR

admin2008-05-10  41

问题 阅读以下说明和c语言函数。
   [说明]
   函数bool Del_elem(STACK*s,char para_ch)的功能是:删除栈*s中与para ch之值相等且最接近栈顶的元素(字符),若栈中不存在该元素,则函数返回 FALSE,否则返回 TRUE。其中,STACK是栈的类型名。
   函数Del_elem实现上述功能的方法是:利用栈的基本操作,先将栈*s中所有比 para_ch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与Para ch之值相等的元素,最后再将s bak中的元素依次存回栈*s。
   在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的函数原型说明如下:
   void InkStack(STACK*S):初始化栈。
   void Push(STACK*S,char e):将一个字符压栈,栈中元素数目增1。
   void Pop(STACK*S):栈顶元素出栈,栈中元素数目减1。
   char Top(STACKS):返回非空栈的栈顶元素值,栈中元素数目不变。
   bool IsEmpty(STACK S):若S是空栈,则返回TRUE;否则返回FALSE。
   bool类型定义如下:
   typedef enum{FALSE=0,TRUE=1)bool;

[C语言函数]
   bool Del_elem(STACK*s,char para_ch)
   {
   STACK s_bgk;    /*定义临时工作栈s_bak,*/
   char  ch;
   bool tag=FALSE;
     (1)              /*初始化临时工作栈s_bak*/
   /*,将栈*s中所有比para_ch更接近栈顶的元素暂时存放在临时工作栈s bak中*/
   while(!IsEmpty(*s)){
      ch=(2);  /*取栈顶元素*/
      Pop(s);
      if(ch=para_ch){
         tag=TRUE;
         break;
     }
   (3);
}
   /*将暂存于临时工作栈s_bak中的元素存回栈*s*/
    while((4))
        ch=Top(s_bak);
     (5)  
        Push(s,ch)
   }
   return tag;
   }

选项

答案(1)InitStack(&s_bak) (2)Top(*s) (3)Push(&s_bak,ch) (4)!IsEmpty(s_bak),或IsEmpty(s_ak)==FALSE (5)Pop(&s_bak)

解析 本题考查的是C语言的函数调用和参数传递问题。
   C语言采用传值调用方式,即将实际参数的值传递给形式参数,因此,实际参数一般是与形式参数类型相同的变量或表达式。但是,若形式参数为指针,则调用语句中的实参应将一个变量的地址传递给形参。
   函数bool Del_elem(STACK*s,char para_ch)的功能是删除栈*s中与para_ch之值相等且最接近栈顶的元素(字符)。因此,利用栈的基本操作,先将栈*s中所有比para ch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s bak中的元素依次存回栈*s。
   从初始化栈的函数原型“void lnitStack(STACK*S)”可知,形参是一个指针变量,那么实参应该是对STACK类型的变量取地址,因此空(1)处应填入“initStack(&s bak)”。
   根据出栈操作的函数原型“void Pop(STACK*S)”,出栈时栈中元素数目减1但调用环境不能获得栈顶元素,因此需要首先调用函数Top()获取栈顶元素的值,然后调用Pop()从栈中删除栈顶元素。因此空(2)应填入“Top(*s)”。临时工作栈需要保存从栈*s弹出的元素,因此,参考压栈操作的函数原型“void Push(STACK*S,chare)”,空(3)应填入“Push(&s bak,ch)”。
   从栈中取元素时,应首先判断是否为空栈,这是使用栈结构的一项基本常识。参考函数原型“bool IsEmpty(STACK S)”和bool类型的定义,空(4)应填入“!IsEmpty(s_bak)”。同时,通过Top和Pop操作从临时工作栈s bak中取出元素,再用Push操作将该元素压入栈*s中,来实现将暂存于临时工作栈s bak中的元素存回栈*s,因此,空(5)填入“Pop(&s_bak)”。
转载请注明原文地址:https://jikaoti.com/ti/OZW7FFFM
0

最新回复(0)