栈作为 数据结构 中重要的知识结构,主要有2种实现方法:
1. 顺序栈
2.链栈
本文章内容主要与 顺序栈的定义与实现有关
定义与实现:
typedef struct Stack
{
int* base;
int* top;
int stacksize;
}Stack;
base --> 字面意思 "基础",即栈底(也会有使用bottom/bot 作为栈底变量的情况)
top --> 字面意思"顶点",即栈顶
(1) 初始化栈:
InitStack(Stack &s)
{
s.base= new int[maxsize];
if(!s.base)
{
cout<<"栈申请失败";
exit(1);
}
s.top=s.base;
s.stacksize=maxsize;
}
(2) 入栈:
int Push_S(Stack &s,int e)
{
if(s.top-s.base==s.stacksize)
{
cout<<"栈满"<<endl;
return 0 ;
}
*s.top=e;
s.top++;
return 1;
}
(3) 出栈:
# define NoUse -1
int Pop_S (Stack &s)
{
if(s.top==s.base)
{
cout<<"栈空"<<endl;
return NoUse;
}
s.top--;
return *s.top;
}
(4)判断栈空:
int IS_stackEmpty(Stack& s)
{
if (s.top == s.base) return 0;
return 1;
}
栈实现 进制转换器:
void changemate(int n,int t)// n->num(源数) , t->转换的进制
{
Stack s;
InitStack(s);
while (n)
{
Push_S(s, n % t);
n=n / t;
}
while (IS_stackEmpty(s))
{
int e;
Pop_S(s, e);
cout << e;
}
}
VS 2020 运行结果: