Самореферентные структуры

Опубликовано: 24 Января, 2022

Самореференциальные структуры - это те структуры, которые имеют один или несколько указателей, которые указывают на тот же тип структуры, что и их член.

Другими словами, структуры, указывающие на один и тот же тип структур, имеют самореферентную природу.

Example:

struct node {
    int data1;
    char data2;
    struct node* link;
};
  
int main()
{
    struct node ob;
    return 0;
}

В приведенном выше примере «ссылка» - это указатель на структуру типа «узел». Следовательно, структура «узел» - это самореференционная структура с «ссылкой» в качестве ссылочного указателя.
Важно учитывать, что указатель должен быть правильно инициализирован перед доступом, поскольку по умолчанию он содержит значение мусора.

Типы самореферентных структур

  1. Самореференциальная структура с одной ссылкой
  2. Самореференциальная структура с несколькими ссылками

Self Referential Structure with Single Link: These structures can have only one self-pointer as their member. The following example will show us how to connect the objects of a self-referential structure with the single link and access the corresponding data members. The connection formed is shown in the following figure.

#include <stdio.h>
  
struct node {
    int data1;
    char data2;
    struct node* link;
};
  
int main()
{
    struct node ob1; // Node1
  
    // Initialization
    ob1.link = NULL;
    ob1.data1 = 10;
    ob1.data2 = 20;
  
    struct node ob2; // Node2
  
    // Initialization
    ob2.link = NULL;
    ob2.data1 = 30;
    ob2.data2 = 40;
  
    // Linking ob1 and ob2
    ob1.link = &ob2;
  
    // Accessing data members of  ob2 using ob1
    printf("%d", ob1.link->data1);
    printf(" %d", ob1.link->data2);
    return 0;
}
Output:
30
40


Самореференциальная
структура с несколькими ссылками: самореференциальные структуры с несколькими ссылками могут иметь более одного указателя на себя. С помощью этих структур можно легко построить множество сложных структур данных. Такие структуры могут легко подключаться к нескольким узлам одновременно. В следующем примере показана одна такая структура с несколькими ссылками.

The connections made in the above example can be understood using the following figure.

#include <stdio.h>
  
struct node {
    int data;
    struct node* prev_link;
    struct node* next_link;
};
  
int main()
{
    struct node ob1; // Node1
  
    // Initialization
    ob1.prev_link = NULL;
    ob1.next_link = NULL;
    ob1.data = 10;
  
    struct node ob2; // Node2
  
    // Initialization
    ob2.prev_link = NULL;
    ob2.next_link = NULL;
    ob2.data = 20;
  
    struct node ob3; // Node3
  
    // Initialization
    ob3.prev_link = NULL;
    ob3.next_link = NULL;
    ob3.data = 30;
  
    // Forward links
    ob1.next_link = &ob2;
    ob2.next_link = &ob3;
  
    // Backward links
    ob2.prev_link = &ob1;
    ob3.prev_link = &ob2;
  
    // Accessing  data of ob1, ob2 and ob3 by ob1
    printf("%d ", ob1.data);
    printf("%d ", ob1.next_link->data);
    printf("%d ", ob1.next_link->next_link->data);
  
    // Accessing data of ob1, ob2 and ob3 by ob2
    printf("%d ", ob2.prev_link->data);
    printf("%d ", ob2.data);
    printf("%d ", ob2.next_link->data);
  
    // Accessing data of ob1, ob2 and ob3 by ob3
    printf("%d ", ob3.prev_link->prev_link->data);
    printf("%d ", ob3.prev_link->data);
    printf("%d", ob3.data);
    return 0;
}
Output:
10    20    30
10    20    30
10    20    30

В приведенном выше примере мы видим, что «ob1», «ob2» и «ob3» являются тремя объектами самореферентной структуры «node». И они связаны с помощью своих ссылок таким образом, что любой из них может легко получить доступ к данным друг друга. В этом красота самореферентных структур. Соединениями можно управлять в соответствии с требованиями программиста.

Приложения:
Самореференционные структуры очень полезны при создании других сложных структур данных, таких как:

  • Связанные списки
  • Стеки
  • Очереди
  • Деревья
  • Графики и т. Д.

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.