#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;
}
3.1栈与队列的基本操作+应用一:数制转换
最新推荐文章于 2022-11-20 17:19:27 发布