| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:向高手请教一下数据结构
只看楼主 加入收藏
wbajieng
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2010-3-28
结帖率:71.43%
收藏
 问题点数:0 回复次数:7 
向高手请教一下数据结构
#include <stdio.h>
#include <stdlib.h>
#define MAXS 8
#define ADD  8
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}Sqstack;//自定义栈类型
void InitStack( Sqstack &s)     //请教一下这个&的作用是什么
{
    s.base = (int *) malloc (MAXS*sizeof(int));
    if( !s.base )
        exit(0);
    s.top = s.base;
    s.stacksize = MAXS;
}

void Push( Sqstack &s, int temp )
{
    if( s.top-s.base>=MAXS )
    {
        s.base =(int *) realloc (s.base, (MAXS+ADD)*sizeof(int));
        if( !s.base )
            exit(0);
        s.top = s.base + s.stacksize;
        s.stacksize += ADD;
    }
    *s.top++ = temp;
}

void Pop( Sqstack &s, int &temp )
{
    if( s.top==s.base )
        return;
    temp = *--s.top;
}

int main()
{
    Sqstack s;
    InitStack(s);
    int n;
    int temp;

    printf("input the number:");
    scanf("%d", &n);
    while( n )
    {
        temp= n%8;
        Push( s, temp );
        n = n/8;
    }
    while( s.base != s.top )
    {
        Pop( s, temp );
        printf("%d",temp);
    }
    printf("\n");

    return 0;
}
搜索更多相关主题的帖子: 数据结构 
2010-05-06 19:14
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
&是引用

★★★★★为人民服务★★★★★
2010-05-06 19:33
wbajieng
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2010-3-28
收藏
得分:0 
回复 2楼 cnfarer
能再说详细点么?谢了哈!   
2010-05-06 19:59
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:0 
C中是没有引用的,为了方便指针使用而在C++中引入引用。在你的程序中引用的作用等同于一级/二级指针。
不过,对这个程序说这些没什么作用,所以很容易的转换成指针。
真正在用二级指针时才感觉到引用的便利之处。二叉平衡树的程序是这方面的经典。


程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXS 8
#define ADD  8
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}Sqstack;//自定义栈类型
void InitStack( Sqstack *s)     // 请教一下这个&的作用是什么
{
    (*s).base = (int *) malloc (MAXS*sizeof(int));
    if( !(*s).base )
        exit(0);
    (*s).top = (*s).base;
    (*s).stacksize = MAXS;
}
void Push( Sqstack *s, int temp )
{
    if( (*s).top-(*s).base>=MAXS )
    {
        (*s).base =(int *) realloc ((*s).base, (MAXS+ADD)*sizeof(int));
        if( !(*s).base )
            exit(0);
        (*s).top = (*s).base + (*s).stacksize;
        (*s).stacksize += ADD;
    }
    *(*s).top++ = temp;
}
void Pop( Sqstack *s, int *temp )
{
    if( (*s).top==(*s).base )
        return;
    (*temp) = *--(*s).top;
}
int main()
{
    Sqstack s;
    InitStack(&s);  //临时对象问题
    int n, temp;

    printf("input the number:");
    scanf("%d", &n);
    while( n )
    {
        temp= n%8;
        Push( &s, temp );
        n = n/8;
    }
    while( s.base != s.top )
    {
        Pop( &s, &temp );
        printf("%d",temp);
    }
    printf("\n");
    return 0;
}





[ 本帖最后由 hzh512 于 2010-5-6 22:15 编辑 ]
收到的鲜花
  • wbajieng2010-05-08 13:28 送鲜花  1朵   附言:好文章

编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-05-06 22:02
tfxanxing
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:82
专家分:165
注 册:2010-5-7
收藏
得分:0 
void InitStack( Sqstack &s)     // 请教一下这个&的作用是什么

&是取地址的操作,也就是2楼说的引用

传实参的时候,不用传指针,如 InitStack(s);

s 是main函数定义的对象,不是指针,执行过后返回main函数时 s 的 内容已受影响
2010-05-08 21:32
wbajieng
Rank: 1
等 级:新手上路
帖 子:20
专家分:1
注 册:2010-3-28
收藏
得分:0 

有些懂了
Think you!啊
2010-05-10 20:51
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:0 
回复 6楼 wbajieng
you are welcome!

编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-05-10 21:59
新绿
Rank: 1
等 级:新手上路
帖 子:15
专家分:7
注 册:2010-4-26
收藏
得分:0 
有道理
2010-05-11 16:13
快速回复:向高手请教一下数据结构
数据加载中...
 
   



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

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