注册 登录
编程论坛 数据结构与算法

向高手请教一下数据结构

wbajieng 发布于 2010-05-06 19:14, 718 次点击
#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;
}
7 回复
#2
cnfarer2010-05-06 19:33
&是引用
#3
wbajieng2010-05-06 19:59
回复 2楼 cnfarer
能再说详细点么?谢了哈!   
#4
hzh5122010-05-06 22:02
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 编辑 ]
#5
tfxanxing2010-05-08 21:32
void InitStack( Sqstack &s)     // 请教一下这个&的作用是什么

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

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

s 是main函数定义的对象,不是指针,执行过后返回main函数时 s 的 内容已受影响
#6
wbajieng2010-05-10 20:51

有些懂了
Think you!啊
#7
hzh5122010-05-10 21:59
回复 6楼 wbajieng
you are welcome!
#8
新绿2010-05-11 16:13
有道理
1