Stack的静态实现不能正常工作

时间:2015-03-14 17:49:47

标签: c

我必须在C上创建一个程序,允许用户输入一个浮点数堆栈,然后progmar应该打印堆栈。我试图让它工作,但它看起来我弄乱了一些东西,因为它正确地返回堆栈的所有元素,但也返回"堆栈是空的" "堆栈的元素是:0.0000"在屏幕上所有其他与0不同的元素之后......

到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
float stack[10];
int top=-1;
void Write(float x)
{
     if(top==9)
     printf("The stack is Full ! \n");
     else
     {
         top++;
         stack[top]=x;
         }
}
float Read()
{
      if(top==-1)
      {
                 printf("The stack is empty ! \n");
                 return 0;
                 }
      else
      {
          float value;
          value=stack[top];
          top--;
          return value;
          }
}

int main()
{
  float x;
  do
  { 
  printf("Molq vyvedete razlichen ot nula element na stecka: ");
  scanf("%f", &x);  
  if(x!=0.0)  
  Write(x);
}while(x!=0.0);
  do 
  {
              x=Read();
              printf("Elementite na stecka sa: %f \n", x);
}while(x!=0.0);   

  system("PAUSE"); 
  return 0;
}

如何消除空堆叠按摩和屏幕元素上显示的0.0000?

2 个答案:

答案 0 :(得分:1)

read是一个读入文件的预定义函数。你调用它的方式使它失败,从而返回-1。实际上,您定义了一个Read函数,但调用了read

堆栈操作的标准名称为pushpop ...

答案 1 :(得分:1)

首先,您的计划中存在拼写错误。您将一个函数命名为Read 但请将其称为read

另一个问题是逻辑错误。在这个循环中

  do
  { 
  printf("Please enter differentt then 0 element of the stack: ");
  scanf("%f", &x);    
  write(x);
}while(x!=0.0);

值0.0将放在堆栈中。那么下一个循环

  do
  {
              x=read();
              printf("The elements of the stack are: %f \n", x);
}while(x!=0.0); 

在读取堆栈中的顶部值(等于0.0,

)后停止迭代

至少改变第一个循环

  do
  { 
  printf("Please enter differentt then 0 element of the stack: ");
  scanf("%f", &x);    
  if ( x != 0.0 ) write(x);
}while(x!=0.0);

如果添加空和满的功能会更好。

在这种情况下,循环可以写成

while ( !full() )
{
      printf("Please enter differentt then 0 element of the stack: ");
      scanf("%f", &x);    
      write(x);
}

while ( !empty() )
{
     x=read();
     printf("The elements of the stack are: %f \n", x);
}