[Estructura de datos] Implementación de cola de lenguaje C

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
Inserte la descripción de la imagen aquí

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

Supongo que te gusta

Origin blog.csdn.net/zhaocx111222333/article/details/114581366
Recomendado
Clasificación