cola
Definición de cola
Cola: Es una tabla lineal especial que solo permite insertar datos en un extremo y borrar datos en el otro extremo. La cola tiene un primero en entrar, primero en salir
Funcionamiento básico de la cola
Poner en cola: El final de la operación de inserción se denomina final de la cola.
Dequeue: El final de la operación de eliminación se denomina jefe del equipo.
La cola también se puede realizar en la estructura de tabla secuencial (matriz) y lista enlazada, porque la cola admiteFinalizar inserción y eliminación de encabezados, Por lo que la lista vinculada es más adecuada para implementar la cola
Implementación de la cola
La lista enlazada individualmente con punteros de cabeza y cola en lenguaje C implementa la cola:
Definición de cola
typedef int Data;
typedef struct queuenode{
Data data;
struct queue* _next;
}queuenode;
typedef struct queue{
queuenode* _start;
queuenode* _end;
}queue;
Inicialización de la cola
void init(queue* qe){
qe->_end = qe->_start = NULL;
}
Expansión de la cola
queuenode* createqe(Data data){
queuenode* node = (queuenode*)malloc(sizeof(queuenode));
node->data = data;
node->_next = NULL;
}
Enqueue y Dequeue
//入队(尾插)
void push(queue* qe, Data data){
queuenode* newqueue=createqe(data);
if (qe->_end == qe->_start == NULL){
qe->_end = qe->_start = newqueue;
}
else{
qe->_end->_next = newqueue;
qe->_end = newqueue;
}
}
//出队(头删)
void pop(queue* qe){
if (qe->_end == NULL){
return;
}
queuenode* next = qe->_start->_next;
free(qe->_start);
qe->_start = next;
//删除之后是否为空表
if (qe->_end == NULL){
qe->_end = NULL;
//避免end变为野指针
}
}
Obtener la cabeza o la cola del equipo
//获取队头元素
int top(queue* qe){
return qe->_start->data;
}
int last(queue* qe){
return qe->_end->data;
}
Obtener la cantidad de elementos
/获取数量
int size(queue* qe){
if (qe->_end == NULL){
return 0;
}
int i = 0;
queuenode* cur = qe->_start;
while (cur){
i++;
cur = cur->_next;
}
return i;
}
Destruye la cola
void destory(queue* qe)
{
assert(qe);
queuenode* cur = qe->_start;
while (cur)
{
queuenode* next = cur->_next;
free(cur);
cur = next;
}
qe->_start = qe->_end = NULL;
}