#include<stdio.h>
#include<windows.h>
#include<malloc.h>
//构造顺序栈的数据类型
#define MaxSize 50
typedef char ElemType;
struct stack
{
char data[50]; //保存数据元素
int Top; //栈顶指针(虚指针)
};
typedef struct stack SqStack;
/*
函数功能:向系统申请空间存储顺序栈,且为空栈
函数形参:SqStack *S
函数返回值:无
*/
void InitStack(SqStack *&s)
{
s=(SqStack *)malloc(sizeof(SqStack));
s->Top=-1; //空栈的标志
}
/*
函数功能:Push
函数形参:S(栈),e(入栈元素)
函数返回值:栈满 返回0 否则 入栈返回1
*/
int Push(SqStack *s,ElemType e)
{
//判断栈满
if(s->Top==MaxSize-1) return 0;
//入栈
s->Top++;
s->data[s->Top]=e;
return 1;
}
/*
函数功能:GetTop
函数形参:s,&e(取栈顶元素)
函数返回值:空栈返回0,否则返回1,e中存栈顶元素
*/
int GetTop(SqStack *s,ElemType &e)
{
//判断栈是否空栈
if(s->Top==1) return 0;
e=s->data[s->Top];
return 1;
}
/*
函数功能:Pop
函数形参:是,&e(取栈顶元素,类似回收站的作用)
函数返回值:空栈返回0,否则元素出栈返回1
*/
int Pop(SqStack *s,ElemType &e)
{
if(s->Top==-1) return 0;
//将删除元素存入回收站e
e=s->data[s->Top];
//移动栈指针
s->Top--;
return 1;
}
int main()
{
SqStack *s;
ElemType e;
int n,r,t;
printf("(1)初始化空栈\n");InitStack(s);
//用户输入转换的十进制数n是?转换成几进制r?
scanf("%d %d",&n,&r);
while(n!=0)
{
t=n/r;
e=n%r;
//取余数
Push(s,e);
//对被除数迭代
n=t;
}
if(GetTop(s,e)==1) printf("(3)当前栈顶元素是%d\n",e);
else printf("(3)当前为空栈\n");
while (s->Top!=-1)
{
if(Pop(s,e)==1) printf("%d",e);
else printf("(4)当前为空栈\n");
}
system("PAUSE");
return 0;
}