鱼C论坛

 找回密码
 立即注册
查看: 3656|回复: 6

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

[复制链接]
发表于 2013-4-9 21:11:28 | 显示全部楼层 |阅读模式
10鱼币

源程序是(问题嵌在程序了 很大的字 哈哈):
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct
{
        int data[MAXSIZE];
        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[s->top];
   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]);
                s->top--;
        }
        return 1;
}

最佳答案

查看完整内容

有几个地方有点小问题 改过的代码: 执行结果:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-9 21:11:29 | 显示全部楼层
有几个地方有点小问题
改过的代码:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define MAXSIZE 100
  4. typedef struct
  5. {
  6.         int data[MAXSIZE];
  7.         int top;
  8. }seqstack;

  9. void main()
  10. {
  11.         int input_stack(seqstack *s);
  12.         int get_stack(seqstack *s,int &k);
  13.         int output_stack(seqstack *s);
  14.         seqstack *s;
  15.         s=(seqstack*)malloc(sizeof(seqstack));
  16.         s->top=-1;
  17.         int k;
  18.         printf("请输入入栈的元素:\n");
  19.         input_stack(s);
  20.         printf("当前栈顶元素是:\n");
  21.         get_stack(s,k);//说是这里没有初始化k 这k不就是int嘛 还怎么初始化??我试着加了一句 k=(int)malloc(sizeof(int))就不报错了 但是 运行时  输出的根本不是栈里的值 是一个很大的值 我猜想是地址 但是就想不通是哪里出了问题 求 鱼友们帮一下我……   
  22.         printf("k=%d\n",k);
  23.         printf("依次输出栈里的所有元素:\n");
  24.         output_stack(s);
  25.         system("pause");
  26. }
  27. int input_stack(seqstack *s1)
  28. {
  29.         int i;
  30.        
  31.         for(i=0;i<MAXSIZE;i++)
  32.         {
  33.                 if((s1->top)>=MAXSIZE-1)
  34.                         return 0;
  35.                 scanf("%d",&s1->data[i]);
  36.                 if(s1->data[i]==0)
  37.                         return 0;
  38.                 s1->top++;
  39.         }
  40.         return 1;
  41. }
  42. int get_stack(seqstack *s,int &k)
  43. {
  44.         k=s->data[s->top];
  45.         return 1;
  46. }
  47. int output_stack(seqstack *s)
  48. {
  49.         int i;
  50.         if((s->top)<0)
  51.                 return 0;
  52.         for(i=s->top;i>=0;i--)
  53.         {
  54.                 printf("%d ",s->data[s->top]);
  55.                 s->top--;
  56.         }
  57.         return 1;
  58. }
复制代码
执行结果:
QQ截图20130409215619.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-9 22:35:25 | 显示全部楼层
不会,友情帮顶~嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-9 22:40:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-9 22:58:05 | 显示全部楼层
int &k = i;是指k是i引用,k其实就是i。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-10 11:08:39 | 显示全部楼层
之所以会出现k没定义跟你定义k的位置有关系,试试把int k;放在seqstack *s;前面或者后面。其他的问题楼上已经给出答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-22 02:29:57 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 06:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表