Рубрики

Развернутый связанный список | Комплект 1 (Введение)

Как и массив и связанный список, развернутый связанный список также является линейной структурой данных и представляет собой вариант связанного списка. В отличие от простого связанного списка, он хранит несколько элементов на каждом узле. То есть, вместо хранения одного элемента в узле, развернутые связанные списки хранят массив элементов в узле. Развернутый связанный список охватывает преимущества как массива, так и связанного списка, так как он уменьшает накладные расходы памяти по сравнению с простыми связанными списками за счет хранения нескольких элементов на каждом узле, а также обладает преимуществом быстрой вставки и удаления по сравнению с тем из связанного списка.

Преимущества:

  • Из-за поведения Cache линейный поиск намного быстрее в развернутых связанных списках.
  • По сравнению с обычным связанным списком, он требует меньше места для хранения указателей / ссылок.
  • Он выполняет такие операции, как вставка, удаление и обход, быстрее, чем обычные связанные списки (потому что поиск быстрее).

Недостатки:

  • Накладные расходы на узел сравнительно высоки, чем у односвязных списков. См. Пример узла в приведенном ниже коде.

Простая реализация в C
Приведенная ниже программа создает простой развернутый связанный список с 3 узлами, содержащими переменное количество элементов в каждом. Он также пересекает созданный список.

C ++

// C ++ программа для реализации развернутого связанного списка
// и пройти его.
#include <bits/stdc++.h>

using namespace std;

#define maxElements 4 

  
// развернут узел связанного списка

class Node 

    public:

    int numElements; 

    int array[maxElements]; 

    Node *next; 

}; 

  
/ * Функция для просмотра развернутого связанного списка
и распечатать все элементы * /

void printUnrolledList(Node *n) 

    while (n != NULL) 

    

        // Печать элементов в текущем узле

        for (int i=0; i<n->numElements; i++) 

            cout<<n->array[i]<<" "

  

        // Перейти к следующему узлу

        n = n->next; 

    

  
// Программа для создания развернутого связанного списка
// с 3 узлами

int main() 

    Node* head = NULL; 

    Node* second = NULL; 

    Node* third = NULL; 

  

    // выделяем 3 узла

    head = new Node();

    second = new Node();

    third = new Node();

  

    // Давайте поместим некоторые значения во второй узел (Number

    // значений должны быть меньше или равны

    // maxElement)

    head->numElements = 3; 

    head->array[0] = 1; 

    head->array[1] = 2; 

    head->array[2] = 3; 

  

    // Связываем первый узел со вторым узлом

    head->next = second; 

  

    // Давайте поместим некоторые значения во второй узел (Number

    // значений должны быть меньше или равны

    // maxElement)

    second->numElements = 3; 

    second->array[0] = 4; 

    second->array[1] = 5; 

    second->array[2] = 6; 

  

    // Связываем второй узел с третьим узлом

    second->next = third; 

  

    // Давайте поместим некоторые значения в третий узел (Number

    // значений должны быть меньше или равны

    // maxElement)

    third->numElements = 3; 

    third->array[0] = 7; 

    third->array[1] = 8; 

    third->array[2] = 9; 

    third->next = NULL; 

  

    printUnrolledList(head); 

  

    return 0; 

  
// Это код, предоставленный rathbhupendra

С

// C программа для реализации развернутого связанного списка
// и пройти его.
#include<stdio.h>
#include<stdlib.h>
#define maxElements 4

  
// развернут узел связанного списка

struct Node

{

    int numElements;

    int array[maxElements];

    struct Node *next;

};

  
/ * Функция для просмотра развернутого связанного списка

   и распечатать все элементы * /

void printUnrolledList(struct Node *n)

{

    while (n != NULL)

    {

        // Печать элементов в текущем узле

        for (int i=0; i<n->numElements; i++)

            printf("%d ", n->array[i]);

  

        // Перейти к следующему узлу

        n = n->next;

    }

}

  
// Программа для создания развернутого связанного списка
// с 3 узлами

int main()

{

    struct Node* head = NULL;

    struct Node* second = NULL;

    struct Node* third = NULL;

  

    // выделяем 3 узла

    head = (struct Node*)malloc(sizeof(struct Node));

    second = (struct Node*)malloc(sizeof(struct Node));

    third = (struct Node*)malloc(sizeof(struct Node));

  

    // Давайте поместим некоторые значения во второй узел (Number

    // значений должны быть меньше или равны

    // maxElement)

    head->numElements = 3;

    head->array[0] = 1;

    head->array[1] = 2;

    head->array[2] = 3;

  

    // Связываем первый узел со вторым узлом

    head->next = second;

  

    // Давайте поместим некоторые значения во второй узел (Number

    // значений должны быть меньше или равны

    // maxElement)

    second->numElements = 3;

    second->array[0] = 4;

    second->array[1] = 5;

    second->array[2] = 6;

  

    // Связываем второй узел с третьим узлом

    second->next = third;

  

    // Давайте поместим некоторые значения в третий узел (Number

    // значений должны быть меньше или равны

    // maxElement)

    third->numElements = 3;

    third->array[0] = 7;

    third->array[1] = 8;

    third->array[2] = 9;

    third->next = NULL;

  

    printUnrolledList(head);

  

    return 0;

}


Выход:

1 2 3 4 5 6 7 8 9

В этой статье мы представили развернутый список и его преимущества. Мы также показали, как пройти список. В следующей статье мы подробно обсудим вставку, удаление и значения maxElements / numElements.

Вставка в развернутый связанный список

Эта статья предоставлена Суровым Агарвалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Развернутый связанный список | Комплект 1 (Введение)

0.00 (0%) 0 votes