Самореферентные структуры
Самореференциальные структуры - это те структуры, которые имеют один или несколько указателей, которые указывают на тот же тип структуры, что и их член.
Другими словами, структуры, указывающие на один и тот же тип структур, имеют самореферентную природу.
Example:
struct node { int data1; char data2; struct node* link; }; int main() { struct node ob; return 0; } |
В приведенном выше примере «ссылка» - это указатель на структуру типа «узел». Следовательно, структура «узел» - это самореференционная структура с «ссылкой» в качестве ссылочного указателя.
Важно учитывать, что указатель должен быть правильно инициализирован перед доступом, поскольку по умолчанию он содержит значение мусора.
Типы самореферентных структур
- Самореференциальная структура с одной ссылкой
- Самореференциальная структура с несколькими ссылками
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; } |
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; } |
10 20 30 10 20 30 10 20 30
В приведенном выше примере мы видим, что «ob1», «ob2» и «ob3» являются тремя объектами самореферентной структуры «node». И они связаны с помощью своих ссылок таким образом, что любой из них может легко получить доступ к данным друг друга. В этом красота самореферентных структур. Соединениями можно управлять в соответствии с требованиями программиста.
Приложения:
Самореференционные структуры очень полезны при создании других сложных структур данных, таких как:
- Связанные списки
- Стеки
- Очереди
- Деревья
- Графики и т. Д.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.