注册 登录
编程论坛 数据结构与算法

请指点一下,程序能够运行但是输出时有点小错误。谢谢!

jrcy 发布于 2013-05-16 22:21, 605 次点击
#include"stdlib.h"
#include<stdio.h>
int s[7];int m;int top;int *v;
void chushihuazhan()
{  v=(int *)malloc(m*sizeof(int));
       top=0;
       return;
}
int  push(int x)
   {         if (top==m)
            { printf("Stack-overflow\n");
              return;}
               top=top+1;
               s[top-1]=x;
                return(x);               
   }
int  pop(int y)
{
      if (top==m)
      { printf("Stack-underflow\n");
        return;}
      {y=s[top-1];
      top=top-1;
      return(y);}
}
int  duzhanding(int  y)
{  if (top==0)
   { printf("Stack empty \n");
     return;}
      y=s[top-1];
      return(y);
}
int main()
{
    int m=10; int w,p,i,t;
    chushihuazhan();
    printf("建立一个容量为%d的栈\n",m);   
    printf("入栈的各元素先后分别为:\n");
    for(t=50;t<=100;t+=10)   
     { push(t);
       printf("%d\n",t);
     }
       printf("连续三次退栈的元素先后为:\n");
    for(i=1;i<=3;i++)   
    {  pop(w);
       printf("%d\n",w); }      
    duzhanding(p);
    printf("栈顶元素为:%d\n",p);
}
最后调用出栈函数还有输出栈顶元素时输出不正常,请帮忙指正一下。谢谢了!
1 回复
#2
cuijunchao2013-05-16 22:47
问题在:duzhanding(p);
     printf("栈顶元素为:%d\n",p);、这两句中,你用p作为duzhanding()的参数,可是你前面根本没有对p 做任何赋值。
再看int  duzhanding(int  y)
 {  if (top==0)
   { printf("Stack empty \n");
      return;}
       y=s[top-1];
       return(y);
 }
这个函数,你返回的y已经不是为面的y了,所以外面的y值根本就没有改变。
你可以改为int main()
 {
     int m=10; int w,p,i,t; //p 在这里没有起什么作用,可以不要
    chushihuazhan();
     printf("建立一个容量为%d的栈\n",m);   
    printf("入栈的各元素先后分别为:\n");
     for(t=50;t<=100;t+=10)   
     { push(t);
        printf("%d\n",t);
      }
        printf("连续三次退栈的元素先后为:\n");
     for(i=1;i<=3;i++)   
    {  pop(w);
        printf("%d\n",w); }      
    p=duzhanding(p);//这里可以这样改,保证你的思路下能得出结果,
     printf("栈顶元素为:%d\n",p);
 }
1