前端之家收集整理的这篇文章主要介绍了
【数据结构】栈的应用--数制转换(c++),
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
头文件:
@H_
403_5@#pragma once
#include <iostream>
#include <assert.h>
using namespace std;
template<class Type>
class SeqStack
{
public:
SeqStack(size_t sz = INIT_SZ);
~SeqStack();
public:
bool empty()const;
bool full()const;
void show()const;
bool push(const Type &x);
bool pop();
void gettop(Type &x);
int length()const;
void clear();
void destory();
void quit_system(Type &x);
private:
enum{ INIT_SZ = 64 };
Type *base;
int capacity;
int top;
};
template<class Type>
SeqStack<Type>::SeqStack(size_t sz = INIT_SZ)
{
capacity = sz > INIT_SZ ? sz : INIT_SZ;
base = new Type[capacity];
assert(base != NULL);
top = 0;
}
template<class Type>
SeqStack<Type>::~SeqStack()
{
destory();
}
// 判断栈是否满了
template<class Type>
bool SeqStack<Type>::full()const
{
return (top >= capacity);
}
// 判断是否为空栈
template<class Type>
bool SeqStack<Type>::empty()const
{
return (top == 0);
}
//
显示
template<class Type>
void SeqStack<Type>::show()const
{
if (top == 0)
{
cout << "the stack is empty!" << endl;
return;
}
for (int i = top - 1; i >= 0; --i)
{
cout << base[i] << endl;
}
}
// 入栈
template<class Type>
bool SeqStack<Type>::push(const Type &x)
{
if (full())
{
cout << "the stack is full,can not enter!" << endl;
return false;
}
else
{
base[top] = x;
top++;
return true;
}
}
// 出栈
template<class Type>
bool SeqStack<Type>::pop()
{
if (empty())
{
cout << "the stack is empty,can not pop!" << endl;
return false;
}
else
{
top--;
return true;
}
}
// 获得栈顶元素
template<class Type>
void SeqStack<Type>::gettop(Type &x)
{
x = base[top - 1];
}
// 求栈长度
template<class Type>
int SeqStack<Type>::length()const
{
return top;
}
// 清空栈
template<class Type>
void SeqStack<Type>::clear()
{
top = 0;
}
// 摧毁栈
template<class Type>
void SeqStack<Type>::destory()
{
delete[]base;
base = NULL;
capacity = top = 0;
}
//
退出系统
template<class Type>
void SeqStack<Type>::quit_system(Type &x)
{
x = 0;
}
主函数:
@H_
403_5@#include "ConNum.h"
int main()
{
SeqStack<int> mystack;
int input = 1;
int value;
int rem; //余数
while (input)
{
cout << "***********************************************************" << endl;
cout << "* [1] decimal to binary [2] decimal to octonary *" << endl;
cout << "* [3] decimal to hexadecimal [4] quit system *" << endl;
cout << "***********************************************************" << endl;
cout << "please choose :";
cin >> input;
switch (input)
{
case 1:
cout << "please enter the decimal number:";
cin >> value;
mystack.push('#');
while (value != 0)
{
rem = value % 2;
mystack.push(rem);
value = value / 2;
}
while (mystack.gettop(rem),rem != '#')
{
cout << rem;
mystack.pop();
}
cout << endl;
break;
case 2:
cout << "please enter the decimal number:";
cin >> value;
mystack.push('#');
while (value != 0)
{
rem = value % 8;
mystack.push(rem);
value = value / 8;
}
while (mystack.gettop(rem),rem != '#')
{
cout << rem;
mystack.pop();
}
cout << endl;
break;
case 3:
cout << "please enter the decimal number:";
cin >> value;
mystack.push('#');
while (value != 0)
{
rem = value % 16;
mystack.push(rem);
value = value / 16;
}
while (mystack.gettop(rem),rem != '#')
{
if (rem > 9)
{
rem = 'A' + (rem - 10);
cout << (char)rem;
}
else
{
cout << rem;
}
mystack.pop();
}
cout << endl;
break;
case 4:
mystack.quit_system(input);
break;
default:
break;
}
}
return 0;
}
原文链接:https://www.f2er.com/datastructure/382640.html