| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 550 人关注过本帖
标题:令人头痛的堆栈问题
只看楼主 加入收藏
大头虾的儿子
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-4
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:5 
令人头痛的堆栈问题
求解,,,,编译通过,int StackPop(SeqStack *S,int *d)的返回值为整形,要么1,要么0,问题是,我想要得到里面的指针变量值,*d,如何才能得到、课本上就直接StackPop(Stack1,&x);printf("%d ",x);我本来也认为没错,但是运行时发现些猫腻,求教于各位大虾
// 静态顺序堆栈操作.cpp : Defines the entry point for the console application.
//


#include<stdio.h>
#include<math.h>
#define MaxStackSize 100
//#include"SeqStack.h"
typedef struct
{
    int stack[MaxStackSize];
    int top;

}SeqStack;
 SeqStack *StackInitiate(SeqStack *S)
{
    S->top =0;
    return (S);
};



int StackPush(SeqStack *S,int x)//入栈
{
    if(S->top >=MaxStackSize)
    {
        printf("堆栈已满无法插入!\n");
        return 0;
    }
    else
    {
        S->stack[S->top] = x;
        S->top++;
        return 1;
    }
};



int StackPop(SeqStack *S,int *d)
{
    if(S->top =0)
    {
    printf("堆栈已空无数据元素出栈\n");
    return 0;
    }
    else
    {
         S->top--;
        *d = S->stack[S->top];
        return 1;
    }
};



int StackTop(SeqStack S,int *d)
{
    if(S.top <=0)
    {
        printf("堆栈已空!\n");
        return 0;
    }
    else
    {
        *d = S.stack[S.top - 1];
        return 1;
    }

};


int StackNotEmpty(SeqStack S)
{
    if(S.top<= 0)
        return 0;
    else
        return 1;
};


int main()
{   
    SeqStack myStack,*Stack1;
    int i,x;//,w
    char ch;
    printf("本程序通过实验使学生掌握静态顺序堆栈\n概念和基本操作,为了试验顺利完成,建议按字母的\n的先后顺序选择选项\n");
   
    scanf(" %c",&ch);
   
    while(ch == 'a'||'b'||'c')
    {
    switch (ch)
    {
        case 'a':
            printf("正在进行栈的初始化\n");
            Stack1 = StackInitiate(&myStack);
            break;
        case 'b':
            printf("正在入栈....\n");
            for(i=0;i<5;i++)
            StackPush(Stack1,i+1);//入栈
            StackTop(*Stack1, &x);//返回栈顶元素
            printf("当前的栈顶数据元素为: %d\n",x);
            break;
        case 'c':
    printf("您选择的是堆栈的弹栈操作,输出操作\n");
    //StackPop(Stack1,&w);//a problem been fund
    /*printf("%d 出栈\n",w);
    StackTop(*Stack1,&x);
            printf("当前的栈顶数据元素为: %d\n",x);*/
        
            
            printf("输出元素");
            while(StackNotEmpty(*Stack1))
            {
                StackPop(Stack1,&x);//此处出现问题
                printf("%d ",x);
               

            }
            break;
        default:
            printf("发生了一件意外的事情,请输入a b c 其中的一个\n");
            break;
        
    }
    scanf(" %c",&ch);
    }


    return 0;
}
搜索更多相关主题的帖子: 如何 课本 include 头痛 
2012-10-04 01:04
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
有啥猫腻?出队列和删链表都是这么来返回被删元素的。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-10-04 08:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:13 
回复 楼主 大头虾的儿子
if(S->top =0) 这里怎么能用=呢?

总有那身价贱的人给作业贴回复完整的代码
2012-10-04 08:51
w823352417
Rank: 3Rank: 3
来 自:甘肃兰州
等 级:论坛游侠
威 望:1
帖 子:43
专家分:113
注 册:2012-10-4
收藏
得分:4 
int StackPop(SeqStack *S,int *d)//定义为返回值是int型指针就可以了  int *StackPop(SeqStack *S,int *d)
{
    if(S->top =0)
    {
    printf("堆栈已空无数据元素出栈\n");
    return 0;//返回指针类型 return d;
    }
    else
    {
         S->top--;
        *d = S->stack[S->top];
        return 1;//返回指针类型 return d;
    }
};
不过这样的话你函数就重新定义了,用法也与原来有差异了

在代码中享受乐趣
2012-10-04 15:38
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
收藏
得分:1 
传错参数了吧,那个返回栈顶元素的函数定义的参数类型是SeqStack
传进去的确实指针类型,不出问题才怪。
这个代码是课本上的?感觉写的不是很好。。。

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-10-04 17:00
大头虾的儿子
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-4
收藏
得分:0 
谢谢咯
2012-10-04 18:19
快速回复:令人头痛的堆栈问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019929 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved