#include
#include
#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;
}
入栈成功,出栈为什么会乱码
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- threenewbee 2016-11-14 18:02关注
#include<iostream> #include<stdio.h> #include<malloc.h> #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10//存储空间分配增量 #define OVERFLOW 1 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; }
**************非递归算法**************
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
Press any key to continue . . .本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 CSS通配符清除内外边距为什么可以覆盖默认样式?
- ¥15 SPSS分类模型实训题步骤
- ¥15 求解决扩散模型代码问题
- ¥15 工创大赛太阳能电动车项目零基础要学什么
- ¥20 limma多组间分析最终p值只有一个
- ¥15 nopCommerce开发问题
- ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
- ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
- ¥15 pycharm输出和导师的一样,但是标红
- ¥15 想问问富文本拿到的html怎么转成docx的