De dos extremos de cola de pensamiento analítico

Echemos un vistazo a lo que define Sí.

la deque (nombre completo cola de doble extremo) deque es decir, tiene una estructura de datos de la cola y las propiedades de la pila. elementos Deque pueden ser expulsados ​​desde ambos extremos, que define las operaciones de inserción y supresión en ambos extremos de la tabla.

Ser capaz de comprender las instrucciones? De todos modos, no estaba al principio, pero realmente es un lenguaje muy refinado para describir la naturaleza de la cola de doble extremo. Esta frase contiene el contenido de dicha información proporcionada en las propiedades de la cola deque simultáneamente, deque la parte delantera y trasera del puntero de pila incluye además propiedades. Esto definitivamente no es fácil de entender, ya que requiere al menos familiaridad con la naturaleza de las pilas y colas, y llega en un momento a pensar en los costos vinculados. Deque y luego esperar a que usted pueda comprender el punto de vista de esta sentencia, se maravilla "Esto es realmente una descripción muy precisa de la naturaleza de la doble cola, y muy refinado."

En este sentido, en este momento de leer este artículo, creo que debe ser dominado antes de aprender cola de doble cola, o menos probable que entren en contacto con, y también para aprender, después de todo, la gente normal quieren aprender a cola.
Incluso si usted ha dominado la cola, antes de que yo primero introducir un poco de cola, con el fin de hacer que está en completo entendimiento claro de lo que digo.

Queue (cola) sólo permite la inserción en un extremo mientras que el otro extremo de la operación de eliminación mesa lineal.
delante: el equipo de gestión en primer lugar, el equipo responsable de la operación.
trasera: Equipo de Gestión de la cola, el equipo responsable de la operación.

Lo anterior es la responsabilidad de la parte delantera y trasera de la cola. Ahora uso el lenguaje probablemente más fácil del mundo para describir lo deque al final es cómo la naturaleza.

cola de composición doble es una versión Puls cola! Y la única diferencia es que la cola, las diferentes funciones de la parte delantera y trasera de cola, de dos extremos en la parte delantera y trasera de las responsabilidades compartidas! .

Voy a explicar un poco más bajo (véase también la línea de la frase anterior que entiende):
cola TRASERO delante, que también está disponible como cola trasera, delantera es también verdad. A continuación, la única diferencia con el de doble extremo cola de la cola sólo diferentes responsabilidades trasera y frontal, a continuación, el equipo deque completamente vacío y lleno de símbolos juez de cola!
Ver aquí, creo que usted tiene que entender lo que es una cola de doble extremo. Con el fin de profundizar en la comprensión de su sugerencia para recoger la pluma y papel, pintura, y luego correr a aplicar la siguiente.

Por último, ¿por qué me entero deque él? De hecho, esto se debe a que la cola de cepillo título del tema en LeetCode cuando hay un tema de doble extremo para diseñar una cola circular, y darse cuenta de la operación correspondiente, que no llegué a conocer y aprender deque. Aquí tema LeetCode I, basado en el código de la aplicación dada (C lenguaje de descripción).

El diseño y la implementación deque. Es necesario apoyar la realización de las siguientes acciones:

MyCircularDeque (k): Constructor, tamaño deque sea k. insertFront (): la adición de un elemento para la cabeza de la deque.
Devuelve verdadero si la operación se ha realizado correctamente. insertLast (): añadir un elemento a la cola de la deque. Devuelve verdadero si la operación se ha realizado correctamente.
deleteFront (): Borrar un elemento de cabeza desde el deque. Devuelve verdadero si la operación se ha realizado correctamente.
deleteLast (): elimina un elemento de la cola deque. Devuelve verdadero si la operación se ha realizado correctamente.
getFront (): Obtener un elemento de cabeza desde el deque. Si el deque está vacía, devuelve -1. getRear (): Obtener el último elemento de una deque.
Si el deque está vacía, devuelve -1. estaVacia (): Comprobar deque está vacío. isFull (): Comprobar si el deque está lleno. Ejemplo:

MyCircularDeque circularDeque = nuevo MycircularDeque (3) ; // ajustar el tamaño de la capacidad de 3.
CircularDeque.insertLast (1.); // devuelve a cierto
circularDeque.insertLast (2); // devuelve a cierto
circularDeque.insertFront (3.); // devuelve a cierto
circularDeque .insertFront (4); // completo, devolver false
circularDeque.getRear (); // devuelve circularDeque.isFull 2 ();
// devuelve verdadero circularDeque.deleteLast (); // retorno a la verdadera
circularDeque.insertFront (4) ; // devuelve a cierto
circularDeque.getFront (); // devuelve 4

consejos:

Todos los valores de la gama de [1, 1000] es el número de la gama de la operación [1, 1000] no utilice la incorporada en el deque biblioteca.

Fuente: Botón de estancia (LeetCode) Dificultad: Media
enlace: https: //leetcode-cn.com/problems/design-circular-deque

typedef struct MyCircularDeque 
{
    int front;
    int rear;
    int MAXSIZE;
    int data[];     //这是伸缩型数组成员,可以理解为动态数组,大小依据内存分配而定。不明白自行查阅
} MyCircularDeque;


bool myCircularDequeIsEmpty(MyCircularDeque* obj);
bool myCircularDequeIsFull(MyCircularDeque* obj);


/** Initialize your data structure here. Set the size of the deque to be k. */
MyCircularDeque* myCircularDequeCreate(int k) {
    MyCircularDeque* obj = (MyCircularDeque*)malloc(sizeof(MyCircularDeque) + (k + 1) * sizeof(int));
    if(!obj)
        return NULL;
    memset(obj, 0, sizeof(MyCircularDeque) + (k + 1) * sizeof(int));
    obj->MAXSIZE = k + 1;

    return obj;
}

/** Adds an item at the front of Deque. Return true if the operation is successful. */
bool myCircularDequeInsertFront(MyCircularDeque* obj, int value) {
    if(myCircularDequeIsFull(obj))
        return false;

    obj->front = (obj->front - 1 + obj->MAXSIZE) % obj->MAXSIZE;
    obj->data[obj->front] = value;
    return true;
}

/** Adds an item at the rear of Deque. Return true if the operation is successful. */
bool myCircularDequeInsertLast(MyCircularDeque* obj, int value) {
    if(myCircularDequeIsFull(obj))
        return false;

    obj->data[obj->rear] = value;
    obj->rear = (obj->rear + 1) % obj->MAXSIZE;
    return true;
}

/** Deletes an item from the front of Deque. Return true if the operation is successful. */
bool myCircularDequeDeleteFront(MyCircularDeque* obj) {
    if(myCircularDequeIsEmpty(obj))
        return false;
    
    obj->front = (obj->front + 1) % obj->MAXSIZE;
    return true;
}

/** Deletes an item from the rear of Deque. Return true if the operation is successful. */
bool myCircularDequeDeleteLast(MyCircularDeque* obj) {  //OVER
    if(myCircularDequeIsEmpty(obj))
        return false;

     obj->rear = (obj->rear - 1 + obj->MAXSIZE) % obj->MAXSIZE;
     return true;
}

/** Get the front item from the deque. */
int myCircularDequeGetFront(MyCircularDeque* obj) { //OVER
    return myCircularDequeIsEmpty(obj) ? -1 : obj->data[obj->front];
}

/** Get the last item from the deque. */
int myCircularDequeGetRear(MyCircularDeque* obj) {  //OVER
    if(myCircularDequeIsEmpty(obj))
        return -1;

    int index = (obj->rear - 1 +obj->MAXSIZE) % obj->MAXSIZE;
    return obj->data[index];
}

/** Checks whether the circular deque is empty or not. */
bool myCircularDequeIsEmpty(MyCircularDeque* obj) { //OVER
    return obj->rear == obj->front ? true : false;
}

/** Checks whether the circular deque is full or not. */
bool myCircularDequeIsFull(MyCircularDeque* obj) {  //OVER
    return (obj->rear +1) % obj->MAXSIZE == obj->front ? true : false;
}

void myCircularDequeFree(MyCircularDeque* obj) {    //OVER
    free(obj);
    obj = NULL;
}

Negación: El código anterior se ha detectado por el sistema LeetCode DO, la facilidad de uso.

Al igual que la punta de un pie (* ^ ▽ ^ *) Bar

Se han publicado 19 artículos originales · ganado elogios 2 · Vistas 2540

Supongo que te gusta

Origin blog.csdn.net/SC_king/article/details/104884849
Recomendado
Clasificación