C ++ realiza la operación básica de la cola de anillo (conversión decimal decimal)

Propósito: comprender la estructura de almacenamiento de la cola del anillo y dominar el diseño de varios algoritmos de cálculo básicos en la cola del anillo.

Contenido: escriba un programa para implementar varias operaciones básicas de la cola de anillo (suponiendo que el tipo de elemento ElemType en la pila es char) y complete las siguientes funciones sobre esta base

(1) Inicializar la cola q;

(2) Determinar si la cola q no está vacía;

(3) Introduzca los elementos a, b y c en secuencia;

(4) Eliminar la cola de un elemento y generar el elemento;

(5) ingrese los elementos d, e, f a su vez;

(6) Salida de la secuencia de dequeue;

(7) Liberar la cola.

Agregue dos funciones más y configure MAXSIZE = 40 al mismo tiempo

     1. Función 1: Usa el equipo para convertir un número decimal en un número binario. Datos de prueba: 0,635 (hasta 8 bits reservados)

     2. Función 2: use la cola para convertir un número decimal en cualquier número decimal dentro del sistema de base 36 (diez números más 26 letras mayúsculas como base), y el usuario ingresa el número decimal y el sistema base convertido.  

       Datos de prueba: ¿Cuál es el número convertido de 0.1234567 a base 29?

================================================

1. Definir la estructura de datos de la cola

#include <iostream>
#include <cassert>
using namespace std;
#define MAXSIZE 40
typedef char Elemtype;
struct SqQueue
{
	Elemtype data[MAXSIZE];
	int front, rear;
};

2. Inicialización de la cola

void InitSqQueue(SqQueue*& q)
{
	q = new SqQueue;
	q->front = q->rear = 0;
}

 3. Destruye la cola

void DestroySqQueue(SqQueue*& q)
{
	delete q;
}

 4. Determinar si la cola está vacía

La condición de que la cola esté vacía: L->delantero == L->trasero;

bool QueueEmpty(SqQueue* q)
{
	return q->front == q->rear;
}

5. Únete al equipo

La condición para que la cola esté llena: (L->rear + 1) % MAXSIZE == L->front

Debido a que la cola es una cola circular, es necesario usar MAXSIZE para el resto, de lo contrario, el puntero de la cola se desbordará.

bool enQueue(SqQueue*& q, Elemtype e)
{
	if ((q->rear + 1) % MAXSIZE == q->front)
		return false;
	q->rear = (q->rear + 1) % MAXSIZE;
	q->data[q->rear] = e;
	return true;
}

6. Elimina la cola

bool deQueue(SqQueue*& q, Elemtype& e)
{
	if (QueueEmpty(L))
		return false;
	q->front = (q->front + 1) % MAXSIZE;
	e = q->data[q->front];
	return true;
}

Debido a que la cola es una cola circular, es necesario usar MAXSIZE para el resto, de lo contrario, el puntero principal se desbordará.

7. Función 1: convertir decimal a binario

Cuando m * 2 > 1, ingrese la cola 1, y m toma la parte decimal;

Cuando m * 2 < 1, ingrese 0, m permanece sin cambios;

Cuando m * 2 == 1, termina la operación.

void change1(SqQueue*& q, double m,int n)//m为测试数据,n为保留的位数
{
	for (int i = 1; i <= n; i++)
	{
		m = m * 2;
		if (m > 1)
		{
			if (!enQueue(q, 1))
				cout << "插入失败";
			m = m - 1;
		}
		else if (m < 1)
		{
			if (!enQueue(q, 0))
				cout << "插入失败";
		}
		else if (m == 1)
		{
			if (!enQueue(q, 1))
				cout << "插入失败";
			break;
		}
	}
}

 8. Función 2: convertir decimal a cualquier decimal dentro de 30 hexadecimales

Cuando m > 10, es necesario agregar letras a la cola. Dado que ElemType es char, la conversión se realiza en función del código ASCII de la letra.

Cuando m < 10, se deben agregar números (caracteres) a la cola. Dado que ElemType es char, la conversión se realiza en función del código ASCII de los números (caracteres).

void change2(SqQueue*& q,double m, double n)//m为测试数据,n为转换的进制
{
	for (int i = 1; i <= 10;i++)//保留十位小数;
	{
		int a;
		m = m * n;
		if (m > 10)
		{
			a = (int)m + 55;//a的最小值为65,A的ASCII码为65;
			if (!enQueue(q,a))
				cout << "插入失败";
			m = m - (int)m;
		}
		else
		{
			a=(int)m + 48;//a的最小值为0,'0'的ASCII码为48;
			if (!enQueue(q,a))
				cout << "插入失败";
			m = m - (int)m;
		}
	}
}

================================================

función principal

int main()
{
	SqQueue *Q;
	ElemType e;
	ElemType a[MAXSIZE] = { 'a','b','c' };
	ElemType b[MAXSIZE] = { 'd','e','f' };

	cout << "1.初始化队列q" << endl;
	InitQueue(Q);

	cout << "2.判断队列q是否非空" << endl;
	if (!QueueEmpty(Q))
		cout << "队列q不为空" << endl;
	else
		cout << "队列q为空" << endl;

	cout << "3.依次进队元素a、b、c" << endl;
	for (int i = 0; i < 3; i++)
		if (!enQueue(Q,a[i]))
			cout << "插入失败" << endl;

	cout << "4.出队一个元素,输出该元素" << endl;
	if (deQueue(Q, e))
		cout << "出队的元素为" << (char)e << endl;

	cout << "5.依次进队元素d、e、f" << endl;
	for (int i = 0; i < 3; i++)
		if (!enQueue(Q, b[i]))
			cout << "插入失败" << endl;

	cout << "6.输出出队序列" << endl;
	while (!QueueEmpty(Q))
	{
		if (deQueue(Q, e))
			cout << (char)e << '\t';
	}
	cout << endl;

	cout << "7.释放队列" << endl;
	DestroyQueue(Q);

	cout << "函数1的实现" << endl;
	SqQueue* L1;
	InitQueue(L1);
	change1(L1, 0.635, 8);
	cout << "0.";
	while (!QueueEmpty(L1))
	{
		if (deQueue(L1, e))
			cout << e;
	}
	DestroyQueue(L1);
	cout << endl;

	cout << "函数2的实现" << endl;
	SqQueue* L2;
	InitQueue(L2);
	cout << "请输入测试数据:"; double k; cin >> k;
	cout << "请输入转换的进制:"; double j; cin >> j;
	change2(L2,k,j);
	cout << "0.";
	while (!QueueEmpty(L2))
	{
		if (deQueue(L2, e))
			cout << (char)e;
	}
	DestroyQueue(L2);
}

Supongo que te gusta

Origin blog.csdn.net/henry594xiaoli/article/details/125624769
Recomendado
Clasificación