Experimento de estructura de datos 5, operación básica de cola en cadena

(1) Propósito del experimento

A través de este experimento, los estudiantes pueden comprender las características estructurales de la cola de cadena y aplicarla de manera flexible, dominar la implementación de programación de las operaciones básicas de la cola de cadena, comprender que la pila es una estructura lineal que inserta en un extremo y elimina en el otro fin, y domina las características de la operación "primero en llegar primero" de la cola de salida, conoce las condiciones para juzgar si la cola está vacía o llena, y familiarízate más con las operaciones de puntero en lenguaje C.

(2) Contenido experimental

Use la estructura de almacenamiento en cadena para realizar la operación básica de la cola definida por el libro de texto.

(3) Interfaz de referencia

El menú incluye las siguientes funciones:

1. Inicializar la cola, 2. Destruir la cola, 3. Vaciar la cola, 4. Vaciar la cola, 5. Encontrar la longitud de la cola, 6. Obtener el elemento principal de la cola, 7. Insertar un elemento, 8 Eliminar un elemento, 9 Mostrar todos los elementos.

Requisitos: las solicitudes y las declaraciones de salida no están permitidas en las funciones personalizadas.

(4) Aceptación/casos de prueba

Llame a cada operación a través del menú, puntos de prueba:

  1. Si se realizan otras operaciones antes de la inicialización, si el programa puede controlarlo;
  2. Inicializar una cola;
  3. Al juzgar que la cola está vacía, la pantalla muestra que la cola está vacía;
  4. 3 números en el equipo, 3, 5, 7;
  5. La longitud del encabezado de la cola, la salida de pantalla 3;
  6. Obtenga el elemento principal de la cola, luego juzgue si la cola está vacía y luego juzgue la longitud de la cola (haga saber a los estudiantes que obtener el elemento principal de la cola no cambia el contenido de la cola y el puntero del comienzo de la cola no cambia);
  7. Salga de la cola, juzgue la longitud de la cola y muestre los elementos restantes en la cola (salir de la cola varias veces, ejecutar la operación de salida después de que la cola esté vacía, ya sea para indicar que la cola está vacía);
  8. Poner en cola un elemento 2, luego sacarlo de la cola y luego juzgar si la cola está vacía (principalmente probar si se han escrito las dos líneas de código en el caso especial de la operación de sacar de la cola);
  9. Destruya el equipo y luego realice otras operaciones para determinar si el programa se puede controlar.

 

A continuación se muestra el código fuente que escribí. 

#include<iostream>
using namespace std;
 
#define MAXQSIZE 100
#define OK 1
#define error -1
#define false 0
#define overflow -2
#define maxsize 20
#define STACKINCREMENT 10

typedef int Status;
typedef int QElemType;

typedef struct QNode {
	QElemType  data;
	struct QNode* next;
}QNode, * QueuePtr;

typedef struct {
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;


Status InitQueue(LinkQueue& Q) {
	Q.front = Q.rear = new QNode;
	if (!Q.front)
		exit(OVERFLOW);
	Q.front->next = NULL;
	return OK;
}

Status QueueEmpty(LinkQueue& Q) {
	if (Q.front == Q.rear)
		return OK;
	else
		return error;
}

Status DestoryQueue(LinkQueue& Q) {
	if (Q.front == Q.rear)return error;
	while (Q.front)
	{
		Q.rear = Q.front->next;
		free(Q.front);
		Q.front = Q.rear;
	}
	return OK;
}

Status EnQueue(LinkQueue& Q, QElemType e) {
	
	QueuePtr p;
	p = new QNode;
	if (!p)
	exit(OVERFLOW);
	p->data = e;
	p->next = NULL;
	Q.rear->next = p;
	Q.rear = p;
	if (Q.front == Q.rear)return error;
	return OK;
}

Status GetHead(LinkQueue Q,QElemType &e) {
	if (Q.front == Q.rear)return error;
	return Q.front->next->data;
}
Status Length(LinkQueue& Q,QElemType &e) {
	if (Q.front == Q.rear)return error;
 e = 0;
	QueuePtr  p = Q.front;
	while (p != Q.rear) {
		e++;
		p = p->next;
	}
	return e;
}

Status DeQueue(LinkQueue& Q,QElemType &e) {
	if (Q.front == Q.rear)return error;
	QNode* p;
	p = Q.front->next;
	e = p->data;
	Q.front->next = p->next;
	if (Q.rear == p)Q.rear = Q.front;
	delete p;
	return OK;
}

int main() {
	int m, e, i, j, n;
	LinkQueue Q;
	cout << "1.初始化链队列" << endl;
	cout << "2.判断链队列是否为空" << endl;
	cout << "3.销毁链队列" << endl;
	cout << "4.入队" << endl;
	cout << "5.求队头元素" << endl;
	cout << "6.求队长" << endl;
	cout << "7.出队" << endl;

	do {
		cout << "请输入你的选择:" << endl;
		cin >> n;
		switch (n)
		{
		case 1:
			m = InitQueue(Q);
			if (m == overflow)
			{
				cout << "队列初始化失败!" << endl;
			}
			if (m == OK)
			{
				cout << "队列初始化成功!" << endl;
			}
			break;
		case 2:
			m = QueueEmpty(Q);
			
			 if (m == error)
			{
				cout << "队列不为空!" << endl;
			}
			else if (m == OK)
			{
				cout << "队列为空!" << endl;
			}
			break;
		case 3:
			m = DestoryQueue(Q);
			if (m == error)
			{
				cout << "请先初始化队列!" << endl;
			}
			else if (m == OK)
			{
				cout << "队列销毁成功" << endl;
			}
			break;
		case 4:
			cout << "请输入你要入队的元素:" << endl;
			cin >> e;
			m = EnQueue(Q,e);
			if (m == error)
			{
				cout << "请先初始化队列!" << endl;
			}
			else {
				cout << "入队成功!" << endl;
			}
			break;
		case  5:
			m = GetHead(Q, e);
			if (m == error) {
				cout << "请先初始化栈!" << endl;
			}
			else {
				cout << "队头元素是:" << e << endl;
			}
			break;
		case 6:
			m = Length(Q,e);
			if (m == error) {
				cout << "请先初始化队列!" << endl;
			}
			else {
				cout << "队长为:" << e<<endl;
			}
			break;
		case 7:
			m = DeQueue(Q, e);
			if (m == error) {
				cout << "请先初始化栈!" << endl;
			}
			else {
				cout << "出队成功" << endl;
			}
			break;
		}
	} while (n > 0);

}

 

Principiantes que aprenden la estructura de datos, el código escrito puede no ser lo suficientemente perfecto, espero que puedan rociarme ligeramente. (pelota pelota) 

Supongo que te gusta

Origin blog.csdn.net/weixin_52357218/article/details/121366371
Recomendado
Clasificación