#include<stdio.h>
#include<malloc.h>
#include<process.h>
typedef int elemtype ;
typedef int status;

//用的是 顺序存储结构
struct stack //栈结构
{
   elemtype  *top;
   elemtype  *base;
   int stacksize;
};
typedef struct stack  stack;

#define  Stack_Size   100 //站的长度
#define  Sizeincrese  10//不够了就添 
#define ok  1
#define error 0
#define  overflow  0
//全部用线性表实现
//***********************************************************************************************
//空栈

status makestack(stack *s)
{
  s->base=(elemtype*)malloc(Stack_Size * sizeof(elemtype));
  if(!s->base)
        exit(overflow);
    s->top = s->base ;
  s->stacksize=Stack_Size ;
      return ok;
}
//************************************************************************************************
//插入一个元素为新的栈顶元素 
status   push(stack *s, elemtype e)
{
   if(s->top - s->base >= s->stacksize)
   {
       
       s->base=(elemtype*)realloc(s->base, (Stack_Size+Sizeincrese)*sizeof(elemtype));
       if(!s->base)
          exit(overflow);
        s->top=s->base+Stack_Size;
        s->stacksize += Sizeincrese;
   }

        *(s->top++)=e;
   
   return ok;
}
//***********************************************************************************************
//弹出一个栈顶元素,并用e返回其值
status  pop(stack *s,elemtype *e)
{
   if(s->base==s->top)
        puts("此栈为空");
        return error;
   *e=*(--s->top);
        return ok;

}

//************************************************************************************************
//若栈不为空,返回栈顶元素
status  gettop(stack *s,elemtype *e)
{
    if(s->base == s->top)
    {
        puts("此栈为空");
        return error;
    }
    *e=*(s->top - 1);
    return ok;
}
//*************************************************************************************************
//检测栈是否为空
status  stackempty(stack *s)
{
  if(s->base == s->top)
      return ok;
  else 
      return  error;
}
//*************************************************************************************************
//主函数
//输入一个十进制数,转换为八进制数

int main()
{
   int number10=0;
   elemtype  e=0;
   stack  s0;
   makestack(&s0);
   puts("请输入你的十进制数: " );
   scanf("%d",number10);
   while(number10) 
   {
      push(&s0,number10%8);
      number10=(int)(number10/8);
   }
   while(!stackempty(&s0))
   {
     pop(&s0,&e);
     printf("输出的八进制数为:%d",e);
   }
  return 1;

}


刚开始学数据结构 ,碰到的问题还挺多,就多麻烦大家了!问题是:
我再VC上运行时,总在分配空间是停下来,要驱动器 还有DBGHEAP.C的路径我取消后
出来一大串汇编指令,不懂了!另外在如果数量超出占第一次分配范围时,要重新分配
我似乎对上边的做法有点不懂!//插入一个元素为新的栈顶元素 
status   push(stack *s, elemtype e)
{
   if(s->top - s->base >= s->stacksize)
   {
       
       s->base=(elemtype*)realloc(s->base, (Stack_Size+Sizeincrese)*sizeof(elemtype));
       if(!s->base)
          exit(overflow);
        s->top=s->base+Stack_Size;
        s->stacksize += Sizeincrese;
   }

        *(s->top++)=e;
   
   return ok;

请大家帮忙!