3.1 Basic operation of stacks and queues + application 1: number system conversion

#include <iostream>

using namespace std;
//#define STACK_INIT_SIZE 100 //存储空间初始分配量
//#define STACKINCREMENT 10 //存储空间分配增量
const int STACK_INIT_SIZE = 100;
const int STACKINCREMENT = 10;
typedef struct
{
    int *base;
    int *top;
    int stacksize;
} SqStack;
//-----基本操作的算法描述(部分) ----- .
int InitStack (SqStack &S)//*3.1构造一个空栈S
{
    S.base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
    if(!S. base)
        return 0; // 存储分配失败
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return 1;
} // InitStack

int GetTop(SqStack S, int &e) //若栈不空,则用e返回S的栈顶元素,并返回0K;否则返回ERROR
{
    if (S.top == S.base)
        return 0;
    e = *(S.top - 1);
    return 1;
} // GetTop

int Push (SqStack &S, int e) //*3.2插人元素e为新的栈顶元素
{
    if(S.top - S.base>= S.stacksize)  //栈满,追加存储空间
    {
        S.base = (int *)realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(int));
        if (!S. base)
            return 0; //存储分配失败
        S.top = S.base + S. stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return 1;
}//Push:

int Pop(SqStack &S, int &e)//若栈不空,则删除s的栈顶元素,用e返回其值,并返回
{
    if (S.top == S.base)
        return 0;
    e = * --S. top;
    return 1;
}// Pop

int StackEmpty(SqStack &S)
{
    if(S.top==S.base) return 1;
    return 0;
}

void conversion() //对于输人的任意一个非负十进制整数,打印输出与其等值的八进制数
{
    int N, e;
    SqStack S;
    InitStack(S); //构造空栈
    scanf ("%d", &N);
    //N=1348;
    while (N)
    {
        Push(S, N%8);
        N = N/8;
    }
    while (!StackEmpty(S))
    {
        Pop(S,e);
        printf("%d",e );
    }
} // conversion
int main()
{
    conversion();//应用一:数制转换;
    printf("\n");
    
    return 0;
}

Guess you like

Origin blog.csdn.net/weixin_42137874/article/details/107716620