Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2223947
  • 博文数量: 668
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 8588
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-29 19:22
文章分类

全部博文(668)

文章存档

2011年(1)

2010年(2)

2009年(273)

2008年(392)

分类:

2009-05-13 11:49:09

#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;
    }
}

阅读(1326) | 评论(0) | 转发(0) |
0

上一篇:堆和栈的区别

下一篇:链表的逆转

给主人留下些什么吧!~~