Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17670003
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-27 11:18:52

#include
#include

#define STACK_INIT_SIZE 10
#define STACKINCRMENT 2
#define JINZHI 8          //可以修改,以实现不同进制的转换

struct stack
{
    int *base;
    int *top;
    int stacksize;
};

int initstack(struct stack &S);
int push(struct stack &s, int x);
int pop(struct stack &S);
int empty(struct stack &S);

int main()
{
    struct stack S;
    long N;

    printf("创建栈:\n");
    if (!initstack(S))
    {
        printf("创建成功!\n");
    }
   
    printf("请输入N:");
    scanf("%d", &N);
    printf("10进制数%d转换%d进制的结果为:", N, JINZHI);

    while(N)
    {
        push(S, N%JINZHI);
        N /= JINZHI;
    }
   
    while(!empty(S))
    {
        printf("%d",pop(S));
       
    }
    printf("\n\n");
    return 0;
}

int initstack(struct stack &S)
{
    S.base = (int *)malloc(sizeof(int) * STACK_INIT_SIZE);
    if(S.base == NULL)
    {
        printf("malloc failed!\n");
        exit(1);
    }
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return 0;
}

int push(struct stack &S, int x)
{
    if (S.top - S.base >= S.stacksize)
    {
        S.base = (int *)malloc(sizeof(int) * (STACKINCRMENT + S.stacksize));

        if(!S.base)
        {
            printf("malloc failed!\n");
            exit(1);
        }
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCRMENT;
    }
    S.top++;
    *S.top= x;
    return 0;
}

int pop(struct stack &S)
{
    int x;
    if (S.top == S.base)
    {
        printf("empty stack");
        exit(1);
    }
    x = *S.top;
    S.top--;
    return x;
}

int empty(struct stack &S)
{
    if (S.top == S.base)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
阅读(564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~