【数据结构】栈的应用--数制转换(c++)

头文件:


#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;
}


主函数:


#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;
}


技术分享


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。