#include <iostream>
#include <string>
using namespace std;
#define maxsize 100
struct sqStack{
int *top;//栈顶
int *base;//栈底
int stacksize;
};
int InitStack(sqStack &S)
{
S.base=new int[maxsize];
if(S.base==NULL){
return 0;
}
S.top=S.base;
S.stacksize=maxsize;
}
bool isempty(sqStack &S)
{
if(S.base==S.top)
return true;
else
return false;
}
int length(sqStack &S)
{
return S.top-S.base;
}
void push(sqStack &S,int e)
{
if(S.top-S.base==S.stacksize)
cout<<"数据溢出"<<endl;
else{S.base=new int[maxsize];
*S.top=e;
S.top++;
}
}
int pop(sqStack &S)
{
while(S.base!=S.top){
int e=*(S.top-1);
S.top--;
return e;
}
}
void convert(int number, int n)
{
sqStack S;
InitStack(S);
int temp=0;
while(number!=0){
temp=number %n;
number=(number-temp)/n ;
push(S,temp);
}
int l;
l=length(S);
for(int i=0;i<l;i++)
{
int e=pop(S);
cout<<e;
}
cout<<endl;
}
int main()
{
convert(10,2);
}
问题还比较多,我先上结果
#include <iostream>
#include <string>
using namespace std;
#define maxsize 10
struct sqStack{
int *top;//栈顶
int *base;//栈底
int stacksize;
};
sqStack InitStack()
{
sqStack S;
S.base=new int[maxsize];
if(S.base==NULL){
exit;
}
S.top=S.base;
S.stacksize=maxsize;
return S;
}
bool isempty(sqStack &S)
{
if(S.base==S.top)
return true;
else
return false;
}
int length(sqStack &S)
{
return S.top-S.base;
}
void push(sqStack &S,int e)
{
if(S.top-S.base==S.stacksize)
cout<<"数据溢出"<<endl;
else{
*S.top=e;
S.top++;
}
}
int pop(sqStack S)
{
int e;
e=*(S.top-1);
return e;
}
void convert(int number, int n)
{
sqStack S;
S = InitStack();
int temp=0;
while(number!=0){
temp=number %n;
number=(number-temp)/n ;
push(S,temp);
}
int l;
l=length(S);
for(int i=0;i<l;i++)
{
int e=pop(S);
S.top--;
cout<<e;
cout<<'\n';
}
cout<<endl;
}
int main()
{
convert(15,10);
}
由于我没有看懂你代码的意思,所以我改了一下,现在代码实现的功能是,你输入一个数13,输出1和3,也是用栈的操作
先说一下你的pop函数,是由逻辑问题的,你写了一个while(S.base!=S.top),这个意思就是直到top等于base就跳出循环,那其实你每次进这个pop函数return的只有最后一个值对不,所以你将第一个数据pop之后你可以在函数外让top--;这样就可以让top指针向后移动了
在一个就是你的push函数你在每次压栈的时候都分配了一块maxsize大小的空间,这里要知道,电脑在分配空间的时候,他每次分配的位置是不确定的,所以你每次分配完空间之后就开启了一个新的栈,但是你的s.top指向的还是你第一个栈的top所以,你最后的结果输出不出来,你把那句删了就行
你的这个sqstack &s;的方法我今天第一次见,不过试了一下还不错,学到了学到了,在你的initsqstack函数里我进行了改动,让他返回一个结构体,我也不知道你会不会这个就当作是个参考吧,如果不会可以私信我