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

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

#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 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)