| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 529 人关注过本帖
标题:求高手解答 栈的问题不太理解 谢谢啦
只看楼主 加入收藏
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:6 
求高手解答 栈的问题不太理解 谢谢啦
#include "stdio.h"
#define stacksize 100        

int push(int s[],int x,int *ptop)
{   
    int top;
    top=*ptop;  
    if ( top==stacksize )      
     {
        printf("overflow\n");
        return 0;
    }
    else
    {
        s[top]=x;
        top++;
        *ptop=top;        //??
        return 1;    //???
    }
}

int pop(int s[],int *py,int *ptop)
{
    int top;
    top=*ptop;                    
    if (top==0)               
    {
       printf("stack empty\n");
       return 0;
    }
   else
   {   
       --top;
       *py=s[top];               
       *ptop=top;     //???   
        return 1;
   }
}


int main()
{
    static int s[stacksize];
    int top=0,result,y;
    int i;

    result=push(s,11,&top);      //??
    result=push(s,22,&top);       //??
    result=push(s,33,&top);         //??
    printf("top=%d\n",top);

    for (i=0;i<3;i++)
    {
        if ( (result=pop(s,&y,&top)) == 1 )
            printf("top=%d,y=%d\n",top,y);
    }
}

打了问号的地方不太理解哦  谢谢


2015-10-23 09:05
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:15 
程序代码:
#include "stdio.h"
#define stacksize 100        

int push(int s[],int x,int *ptop)
{    
    int top;
    top=*ptop;  
    if ( top==stacksize )      
     {
        printf("overflow\n");
        return 0;
    }
    else
    {
        s[top]=x;
        top++;
        *ptop=top;        //这是入栈操作里的标记栈顶元素下标的功能
        return 1;    //返回1表示入栈成功!
    }
}

int pop(int s[],int *py,int *ptop)
{
    int top;
    top=*ptop;                    
    if (top==0)                
    {
       printf("stack empty\n");
       return 0;
    }
   else
   {    
       --top;
       *py=s[top];               
       *ptop=top;     //这是出栈操作里的标记栈顶元素下标的功能 
        return 1;
   }
}


int main()
{
    static int s[stacksize];
    int top=0,result,y;
    int i;

    result=push(s,11,&top);      //不知道具体问什么,就说说个人理解吧,&top取地址符,传值传的是top的地址,目的是调用函数形参的改变对实参产生影响
    result=push(s,22,&top);       //因为访问的是同一变量的地址
    result=push(s,33,&top);         //??
    printf("top=%d\n",top);

    for (i=0;i<3;i++)
    {
        if ( (result=pop(s,&y,&top)) == 1 )
            printf("top=%d,y=%d\n",top,y);
    }
}

剑栈风樯各苦辛,别时冰雪到时春
2015-10-23 12:15
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 2楼 林月儿
恩恩  其实我也不知道我在问什么  就是有点不能完全理解  但也说不清楚在那里

不要不要的。。。
2015-10-23 14:31
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
static int s[stacksize];
    int top=0,result,y;
其实要我说呢,还是定义一个栈的结构体
当然你的结构体必然是用数组为存储媒介
这里在栈溢出以及栈空等处理没什么问题就是返回值的打印。。。。

剑栈风樯各苦辛,别时冰雪到时春
2015-10-23 17:10
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 5楼 林月儿
栈这里很难理解啊

不要不要的。。。
2015-10-23 20:38
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
没什么难理解的啊,就是处理数据只能从栈顶处
在面向对象编程里封装了几个常用方法
peek();访问栈顶元素pop();退栈push();进栈等
你写的数组表现,还是很好理解的

剑栈风樯各苦辛,别时冰雪到时春
2015-10-23 20:47
快速回复:求高手解答 栈的问题不太理解 谢谢啦
数据加载中...
 
   



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

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