入栈成功,出栈为什么会乱码
#include<iostream>
#include<stdio.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
typedef struct
{
int *base;//在栈构造和销毁之后,base的值为NULL
int *top;//栈顶指针
int stacksize;//当前栈已分配的存储空间,以元素为单位
}Sqstack;
void InitStack(Sqstack &S)//构造一个空栈
{
S.base = (int *)alloca(STACK_INIT_SIZE*sizeof(int));
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE; //存储空间初始分配量100
}
bool Push(Sqstack &S, int e)
{
//插入元素e作为栈顶元素
if (S.top - S.base >= S.stacksize)//栈满追加存储空间
{
S.base = (int *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(int));
if (!S.base) { exit(OVERFLOW); return false; }//分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++= e;
return true;
}//push
bool Pop(Sqstack &S, int &e)
{
//若栈不空则删除栈顶元素,用e返回值,返回true,否则返回false
if (S.top == S.base) return false;//空栈
e = *--S.top;
return true;
}//pop
bool IsEmpty(Sqstack S)
{
//判断栈是否为空
if (S.top == S.base)return true;
return false;
}
void Conversion(int x)
{
//转换10进制数
Sqstack S;
int temp;
InitStack(S);//构造空栈
if (x == 0)printf("0");
else
{
while (x)
{
Push(S, x % 2);
x /= 2;
}//将10进制数短除,入栈
while (!IsEmpty(S))
{
Pop(S, temp);
printf("%d", temp);
}//逆序输出
}
putchar(10);
}//Conversion
int main()
{
printf("**************非递归算法**************\n");
for (int i = 0; i < 16; i++)
Conversion(i);
system("pause");
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Pop(S, &temp);
评论里看到有人提到
alloca
,窝才注意到,原来alloca
是在栈上分配的内存。。。这种类型的内存会在调用它的函数结束后被系统自动回收