数据结构专栏:数据结构_脑子不好的小菜鸟的博客-CSDN博客
/*栈的相关操作*/
#define ok 1
#define error 0
#define overflow -2
typedef int selemtype;
typedef int status;
#define InitSize 100
#define AddSize 50
typedef struct Stack
{
selemtype* base;
selemtype* top;
int stacksize;
}Stack;
status InitStack(Stack& st)
{
st.base = (selemtype*)malloc(InitSize * sizeof(selemtype));
if (st.base == NULL)
exit(overflow);
st.stacksize = InitSize;
st.top = st.base;
return ok;
}
status Push1(Stack& st, int n)
{
int i;
selemtype e;
for (i = 0; i < n; i++)
{
scanf("%d", &e);
if (st.top - st.base >= st.stacksize)
{
st.base = (selemtype*)realloc(st.base/*realloc要两个参数*/, (st.stacksize + AddSize) * sizeof(selemtype));
if (st.base == NULL)
{
printf("栈已满,内存分配失败\n");
exit(error);
}
st.stacksize = st.stacksize + AddSize;
st.top = st.base + st.stacksize;
}
*st.top = e;
st.top++;
}
return ok;
}
status Push(Stack& st, selemtype e)
{
if (st.top - st.base >= st.stacksize)
{
st.base = (selemtype*)realloc(st.base/*realloc要两个参数*/, (st.stacksize + AddSize) * sizeof(selemtype));
if (st.base == NULL)
{
printf("栈已满,内存分配失败\n");
exit(error);
}
st.stacksize = st.stacksize + AddSize;
st.top = st.base + st.stacksize;
}
*st.top = e;
st.top++;
return ok;
}
status Pop(Stack& st, selemtype&/*注意要带出来,要用引用*/ e)
{
if (st.top == st.base)
{
printf("栈空,弹出失败\n");
return error;
}
e = *(--st.top);
}
void conversion(selemtype num, int jz)
{
Stack st;
InitStack(st);
while (num)
{
Push(st, num%jz);/*不知道元素个数的*/
num /= jz;
}
while (st.top != st.base)
{
selemtype e;
Pop(st, e);
printf("%d", e);
}
}
int main()
{
Stack st;
InitStack(st);
printf("请输入你要放入的元素个数和放入的元素:\n");
int n, i;
scanf("%d", &n);
Push1(st, n);/*知道元素个数的Push*/
selemtype e;//栈顶元素
if (Pop(st, e))
{
printf("栈顶元素为:%d\n", e);
}
//进制转换
printf("请输入你要转换的数字和你要转换成的进制\n");
selemtype num, jz;
scanf("%d%d", &num, &jz);
conversion(num, jz);
return 0;
}