鱼C论坛

 找回密码
 立即注册
查看: 4269|回复: 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[i]);
                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;
}

[/i]

最佳答案

查看完整内容

有几个地方有点小问题 改过的代码: 执行结果:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-9 21:11:29 | 显示全部楼层
有几个地方有点小问题
改过的代码:
#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 *s1)
{
        int i;
        
        for(i=0;i<MAXSIZE;i++)
        {
                if((s1->top)>=MAXSIZE-1)
                        return 0;
                scanf("%d",&s1->data[i]);
                if(s1->data[i]==0)
                        return 0;
                s1->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;
}
执行结果:
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-12-22 18:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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