程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> sizeof-入棧成功,出棧為什麼會亂碼

sizeof-入棧成功,出棧為什麼會亂碼

編輯:編程解疑
入棧成功,出棧為什麼會亂碼

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

最佳回答:


 #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 . . .

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved