Charles_Su 2016-11-14 16:39 采纳率: 21.4%
浏览 1201
已采纳

入栈成功,出栈为什么会乱码

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

  • 写回答

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的