权志龙_爱死你la 发表于 2013-4-9 21:11:28

顺序栈基本操作的小程序 有点问题


源程序是(问题嵌在程序了 很大的字 哈哈):
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct
{
      int data;
      int top;
}seqstack;
void main()
{


   int input_stack(seqstack *s);
   int get_stack(seqstack *s,int k);
   int output_stack(seqstack *s);
   seqstack *s;
   s=(seqstack*)malloc(sizeof(seqstack));
   s->top=-1;
   int k;
   printf("请输入入栈的元素:\n");
   input_stack(s);
   printf("当前栈顶元素是:\n");
   get_stack(s,k);//说是这里没有初始化k 这k不就是int嘛 还怎么初始化??我试着加了一句 k=(int)malloc(sizeof(int))就不报错了 但是 运行时输出的根本不是栈里的值 是一个很大的值 我猜想是地址 但是就想不通是哪里出了问题 求 鱼友们帮一下我……   printf("k=%d\n",k);
   printf("依次输出栈里的所有元素:\n");
   output_stack(s);
   system("pause");
}
int input_stack(seqstack *s)
{
      int i;
      if((s->top)>=MAXSIZE-1)
                return 0;
      for(i=0;i<MAXSIZE;i++)
      {
                scanf("%d",&s->data);
                if(s->data==0)
                        return 0;
                s->top++;
      }
      return 1;
}
int get_stack(seqstack *s,int k)
{
   k=s->data;
   return 1;
}
int output_stack(seqstack *s)
{
      int i;
      if((s->top)<0)
                return 0;
      for(i=s->top;i>=0;i--)
      {
                printf("%d ",s->data);
                s->top--;
      }
      return 1;
}

小新110 发表于 2013-4-9 21:11:29

有几个地方有点小问题
改过的代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct
{
        int data;
        int top;
}seqstack;

void main()
{
        int input_stack(seqstack *s);
        int get_stack(seqstack *s,int &k);
        int output_stack(seqstack *s);
        seqstack *s;
        s=(seqstack*)malloc(sizeof(seqstack));
        s->top=-1;
        int k;
        printf("请输入入栈的元素:\n");
        input_stack(s);
        printf("当前栈顶元素是:\n");
        get_stack(s,k);//说是这里没有初始化k 这k不就是int嘛 还怎么初始化??我试着加了一句 k=(int)malloc(sizeof(int))就不报错了 但是 运行时输出的根本不是栈里的值 是一个很大的值 我猜想是地址 但是就想不通是哪里出了问题 求 鱼友们帮一下我……   
        printf("k=%d\n",k);
        printf("依次输出栈里的所有元素:\n");
        output_stack(s);
        system("pause");
}
int input_stack(seqstack *s1)
{
        int i;
       
        for(i=0;i<MAXSIZE;i++)
        {
                if((s1->top)>=MAXSIZE-1)
                        return 0;
                scanf("%d",&s1->data);
                if(s1->data==0)
                        return 0;
                s1->top++;
        }
        return 1;
}
int get_stack(seqstack *s,int &k)
{
        k=s->data;
        return 1;
}
int output_stack(seqstack *s)
{
        int i;
        if((s->top)<0)
                return 0;
        for(i=s->top;i>=0;i--)
        {
                printf("%d ",s->data);
                s->top--;
        }
        return 1;
}执行结果:

伽利略幼稚 发表于 2013-4-9 22:35:25

不会,友情帮顶~嘿嘿

权志龙_爱死你la 发表于 2013-4-9 22:40:55

小新110 发表于 2013-4-9 21:57 static/image/common/back.gif
有几个地方有点小问题
改过的代码:
执行结果:

我不明白 为什么&k就可以了   麻烦你给讲解一下呗    谢谢谢谢

小新110 发表于 2013-4-9 22:58:05

int &k = i;是指k是i引用,k其实就是i。

小亮1201 发表于 2013-4-10 11:08:39

之所以会出现k没定义跟你定义k的位置有关系,试试把int k;放在seqstack *s;前面或者后面。其他的问题楼上已经给出答案。

evasong 发表于 2013-4-22 02:29:57

强烈支持楼主ing……
页: [1]
查看完整版本: 顺序栈基本操作的小程序 有点问题