Estructura de Datos de Ensayos - dos tipos de colas, y la STL <cola>

Nos encontraremos con un presunto accidente el sistema operativo, simplemente apunte el puntero del ratón también sin efecto, pero después de un tiempo, se pondrá sus operaciones con el ratón se llevan a cabo de nuevo, en el proceso, en el uso de dicha cola de datos clasificación estructura.

队列( queue )是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除的一端称为队头。

En primer lugar, la cola de cadena

cola de la cadena, similar a la de un tipo de lista de la cola, el espacio para una cadena de la longitud de la cola no es fijo, el ciclo de la orden de la cola almacenada, más un campo de puntero solamente.

definiciones

Necesidad de definir dos estructuras, un nodo es un puntero cabeza y la cola

typedef int datatype;
typedef struct queue_node
{
	datatype data;
	queue_node* next; //下一个结点(结构体指针)
}node,*queueptr; //节点结构的指针
struct linked_queue //链式队列的结构
{
	queueptr front, rear;
};

inicialización de colas

Inicialización de la cola, solamente necesita ser inicializado a la estructura de cola, en cuanto a la aplicación en el nodo de inserción.

int initqueue(linked_queue &q) //初始化链式队列结构,引用传递
{
	q.front = q.rear = (queueptr)(malloc(sizeof(node)));
	if (!q.front)
	{
		cout << "初始化失败" << endl;
		return 0;
	}
	q.front->next = NULL; //此处一定要置空
	cout << q.front->next << endl;
	return 1;
}

Insertar

Un punto digno de mención es la forma de abordar el primer elemento del nodo principal se asigna a continuación?
En primer lugar, durante la inicialización, el frente de la cabeza y la cola, igual trasera, a continuación, utilizar rear.next = (dirección de nodo) la asignación, se puede resuelto.

int insert_queue(linked_queue &q, datatype x)//将x插入队列
{
	queueptr s = (queueptr)malloc(sizeof(node));
	if (!s)
	{
		cout << "申请失败" << endl;
		return 0;
	}
	else
	{
		s->data = x;
		s->next = NULL; //生成新的结点
		q.rear->next = s; 
		//插入尾部,刚开始第一步时,因为头尾指针相同,所以头指针被赋予了第一个元素的地址
		q.rear = s; //修改队尾指针
		return 1;
	}
}

Pop-up elemento

Cuando el pop-up es necesario determinar si la cola está vacía? Si es el primer elemento del pop? Si el primer elemento es la necesidad de dejar que la cabeza emergente y punteros de cola son iguales otra vez.

int pop_queue(linked_queue &q, datatype& e)//用e返回其值
{
	queueptr p;
	if (q.front == q.rear)
	{
		cout << "队列为空" << endl;
		return 0;
	}
	p = q.front->next; //暂存头元素指针
	e = p->data; 
	q.front = p->next;
	if (q.rear = p) //若队头是队尾,删除后队尾指向队头
		q.rear = q.front;
	free(p);
	return 1;
}

En cuanto a la pantalla, el cálculo y el mismo número de elementos en la cola de la lista enlazada.

Segunda cola, cíclico

En primer lugar, Echemos un vistazo a un problema, se supone que una longitud de la matriz 5, el estado inicial de la cola está vacía punteros trasero, delantero y al punto a la posición 0 del subíndice. A continuación, poner en cola a1, a2, a3, a4, delanteros puntos aún puntero al siguiente lugar designado como 0, 4 puntos traseros a la ubicación.

Quitar de la cola a1, a2, entonces el puntero apunta frontal a la posición etiquetados 2, a5 trasera sin cambios equipo de reentrada, esta vez frente puntero constante, puntero pasa traseros hacia el exterior de la matriz. En este punto podemos estar en la posición 0,1 o repuesto, un fenómeno llamado un falso desbordamiento.

Así que la solución a este problema es la parte de atrás es completa, y luego empezar de cero.我们把队列的这种头尾相接的顺序存储结构称为循环队列。

Al escribir código, debemos tener en cuenta las siguientes preguntas.

Cuando la cola está vacía? Obviamente, cuando el frente == trasera cuando, con el fin de evitar que no se sabe cuando los dos son iguales es vacío o lleno. Cambiamos las reglas cuando la cola está llena, hay una serie de una unidad de repuesto.

La cola llena: Se define el tamaño máximo de la cola de QUEUESIZE de bits máxima, esa cola condición de lleno es (rear+1)%queuesize==front.

La longitud de la cola: Cuando trasera <Cuando frontal, la longitud de la parte trasera frente + QUEUESIZE, pero trasero> Cuando el frente, la longitud de la parte trasera por adelantado, por lo que la fórmula general (rear-front+queuesize)%queuesize

Definición y funcionamiento básico

typedef int datatype;
#define maxsize 1024
typedef struct circular_queue
{
	datatype data[maxsize];
	int front;
	int rear;
}queue;
int initqueue(queue *q) //初始化
{
	q->front = q->rear = 0;
	return 1;
}
int length(queue* q) //求长度
{
	return (q->rear - q->front + maxsize) % maxsize;
}

Insertar

int insert_queue(queue* q, datatype e)
{
	if ((q->rear + 1) % maxsize == q->front)
	{
		cout << "循环队列为满" << endl;
		return 0;
	}
	q->data[q->rear] = e;
	q->rear = (q->rear + 1) % maxsize;
	return 1;
}

Eliminar

int pop_queue(queue* q, datatype* x)//弹出元素放到地址x中
{
	if (q->front == q->rear)
	{
		cout << "循环队列为空" << endl;
		return 0;
	}
	*x = q->data[q->front];
	q->front = (q->front + 1) % maxsize;
	return 1;
}

todos los elementos

int show_queue(queue* q)
{
	if (q->front == q->rear)
	{
		cout << "循环队列为空" << endl;
		return 0;
	}
	int i = q->front;
	while ( i% maxsize != q->rear) //从头到尾
	{
		cout << q->data[i] << endl;
		i++;
	}
}

三、STL中的queue

La primera es la cola de base, el funcionamiento es muy sencillo, después de todo, la rueda se terminó.

#include<queue>//头文件
queue<typename>name;
back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数

El funcionamiento básico de la cola de prioridad

En la cola de prioridad, el elemento se da prioridad. Al acceder al elemento, el elemento con la prioridad más alta es el primero en ser eliminado. Similar a la función y operación.

definición:priority_queue<Type, Container, Functional>

Tipo es el tipo de datos, el tipo de contenedor es Container (deben ser implementados arrays de contenedores para contenedores, tales como vector, deque y similares, pero no pueden utilizar el valor predeterminado se utiliza dentro de list.STL Vector), es una comparación de la forma de realización funcional. Cuando sólo necesitan tipos de datos personalizados uso que pasar estos tres parámetros, utilizando los tipos de datos básicos, sólo los tipos de datos de entrada, el valor predeterminado es el gran montón superior. priority_queue <> contenedor soportable debe implementarse en una variedad de contenedores

 priority_queue<int> a; 
//等同于 priority_queue<int, vector<int>, less<int> > a;
priority_queue<int, vector<int>, greater<int> > b;  
//这样就是小顶堆
堆:通俗来讲利用完全二叉树的结构来维护的一维数组

Supongo que te gusta

Origin www.cnblogs.com/lonely-ok/p/12656775.html
Recomendado
Clasificación