题目描述
设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制输出。
函数接口定义:
Status SPush( SqStack &s,ElemType x)
{
if(s.top==s.stacksize) //栈满
return ERROR;
________________________;//1条或2条语句均可
return OK;
}
Status SPop( SqStack &s,int &e )
{
if(s.top==0) //栈空
return ERROR;
s.top--; //S.top下移
_________=s.data[s.top]; //把栈顶元素赋给参数e
return OK;
}
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *data; //存储元素的数组
int top; //栈顶指针
int stacksize; //栈最大容量
}SqStack;
void CreateStack(SqStack &s)
{
s.data= (ElemType *)malloc(MaxSize*sizeof(ElemType));
s.top=0;
s.stacksize=MaxSize;
}
Status SPush( SqStack &s, ElemType x );
Status SPop( SqStack &s,int &e );
int main()
{
SqStack s;
int N,e;
CreateStack(s);
scanf("%d", &N);
while (N) {
if(SPush(s,N%2))
N=N/2;
else{
printf("stack is overflow!\n");
return 0;
}
}
while(SPop(s,e))
printf("%d",e);
printf("\n");
return 0;
}
/* 请在这里填写答案 */
输入样例:
1023
输出样例:
1111111111
解题思路
基本就按照题目函数接口给的提示写就行了
C语言解法
Status SPush( SqStack &s,ElemType x)
{
if(s.top==s.stacksize) //栈满
return ERROR;
s.data[s.top++]=x; //注意这道题的栈顶指针初始化为0而不是-1 所以这里要后置递增
return OK;
}
Status SPop( SqStack &s,int &e )
{
if(s.top==0) //栈空
return ERROR;
s.top--; //S.top下移
e=s.data[s.top]; //把栈顶元素赋给参数e
return OK;
}