408 King's Road Estructura de datos Ejercicios de código después de clase (X)

¡Acostúmbrate a escribir juntos! Este es el día 14 de mi participación en el "Desafío de actualización de abril del nuevo plan diario de Nuggets", haga clic para ver los detalles del evento .

Planeo actualizar la implementación de todos los ejercicios de código extraescolares en la estructura de datos de King's Road 23. Aunque los exámenes generalmente están escritos en pseudocódigo, los he implementado todos para el trastorno obsesivo-compulsivo. El almacén está aquí.

  • Mesa Lineal 14/14
  • Lista enlazada 7/25

2.3.7, 6

imagen.png

  • Saque los datos de la lista vinculada y colóquelos en la matriz para ordenar, y luego vuelva a colocar los números ordenados en la lista vinculada
  • Espacio típico para el tiempo , ordenando la complejidad del tiempo O(nlogn), la complejidad del espacio O(n)
void sortList(LinkList &L, int len) {
  // 1.将链表数据复制到数组中
  LNode *head = L->next;
  int a[len], i = 0;
  while (head != NULL) {
    a[i++] = head->data;
    head = head->next;
  }

  // 2.排序
  sort(a, a+len);

  // 3.将排序后的数组复制回链表
  head = L->next, i = 0;
  while (head != NULL) {
    head->data = a[i++];
    head = head->next;
  }
}
复制代码
  • Clasificación por inserción, primero construya una lista ordenada previamente con un solo nodo
  • Los elementos de la lista enlazada p restante se pueden insertar en sus respectivas posiciones.
  • Complejidad temporal O(n 2 ), complejidad espacial O(1)
void sortList2(LinkList &L) {
  LNode *p = L->next, *pre;
  LNode *q = p->next;
  p->next = NULL;     // 1.构建只有一个结点的有序链表
  p = q;

  // 2.分别查找位置插入
  while (p != NULL) {
    q = p->next;
    pre = L;
    
    // 找到有序的位置
    while (pre->next != NULL && pre->next->data < p->data) {
      pre = pre->next;
    }
    // 插入
    p->next = pre->next;
    pre->next = p;
    
    p = q;
  }
}
复制代码

2.3.7, 7

imagen.png

  • Esta pregunta es muy simple, solo recorra y verifique uno por uno, y elimínelo si no coincide.
  • Puntero doble, eliminar debe tener su puntero predecesor
  • Complejidad temporal O(n), complejidad espacial O(1)
void delRange(LinkList &L, int min, int max) {
  LNode *p = L->next, *pre = L;

  while (p != NULL) {
    if (p->data > min && p->data < max) {
      // 在范围内就删除
      pre->next = p->next;
      free(p);
      p = pre->next;
    } else {
      // 不在范围内就继续遍历
      pre = pre->next;
      p = p->next;
    }
  }
}
复制代码

Supongo que te gusta

Origin juejin.im/post/7087086744046141477
Recomendado
Clasificación