用C++语言编写顺序栈
功能:随机输入一个整数以及一个想要转换的进制数,然后再通过出栈输出新的进制数。
实践结果:
实现过程:
1、入栈:就是一个简单的往数组添加元素的过程
template <typename Type>void stack<Type>::push(Type x){
if(isFull())
return;
top++;
ele[top] = x;
}
2、出栈:取出栈顶位置的元素就是一个简单的删除尾元素的过程
源代码如下:
template <typename Type>void stack<Type>::pop(){
if(isEmpty())
return;
top--;
}
3、查看栈顶元素:就是一个简单的输出尾元素的过程
template <typename Type>Type stack<Type>::getTop(){
if(isEmpty()){return 0;}
else{
return ele[top];
}
4、进制数的转换:涉及到一个牛逼的算法
while(aa/bb){
aa=aa/bb;//进行整除
int d=aa%bb;//求余数
a.push(d);//每求一个余数出来就进栈
}
源代码如下:
#include <iostream>
using namespace std;
template <typename Type>class stack{
private:
int top;
int Size;//最大长度
Type *ele;
public:
stack(int top1 = -1 , int Size1 = 13):top(top1),Size(Size1){
ele = new Type[Size];
}
~stack(){delete [] ele;}
void push(Type x);
void pop();
Type getTop();
bool isEmpty();
bool isFull();
void print();
};
template <typename Type>void stack<Type>::push(Type x){
if(isFull())
return;
top++;
ele[top] = x;
}
template <typename Type>void stack<Type>::pop(){
if(isEmpty())
return;
top--;
}
template <typename Type>Type stack<Type>::getTop(){
if(isEmpty()){return 0;}
else{
return ele[top];
}
}
template <typename Type>bool stack<Type>::isEmpty(){
return top==-1;
}
template <typename Type>bool stack<Type>::isFull(){
return top==Size-1;
}
template <typename Type>void stack<Type>::print(){
if(isEmpty()){return;}
for(int i = top; i >=0 ; i--){
cout<<ele[i]<<" ";
}
}
void main(){
stack<int> a;
int aa,bb,c;
cout<<"请输入一个非负整数和一个需要转换的进制"<<endl;
cin>>aa>>bb;
c=aa%bb;
a.push(c);
while(aa/bb){
aa=aa/bb;
int d=aa%bb;
a.push(d);
}
cout<<"输出后的栈元素"<<endl;
a.print();
cout<<endl;
int e=a.getTop();
cout<<"栈顶元素为"<<e<<endl;
}