Двусвязный список и его программная реализация.


Ранее рассмотрен односвязный список, в котором легко найти следующий элемент, но вернуться на предыдущий – достаточно трудно. Его легко пройти, начиная от головы, но совершенно невозможно «против шерсти», в обратном порядке.

Для решения указанной проблемы используется другая структура – двусвязный список. Для такого списка в качестве ссылки используется два указателя – один на следующий элемент списка, другой – на предыдущий.

Рис. 8. Организация двусвязного списка

Рассмотрим схемы реализации некоторых операций для двусвязного списка.

1. Удаление элемента

Рис. 9. Удаление элемента двусвязного списка

2. Вставка элемента

Рис. 10. Вставка элемента в двусвязный список

 

#ifndef LISTS2_

#define LISTS2_

 

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <conio.h>

//////////////////////////////////////////////////////

// Элемент списка

//////////////////////////////////////////////////////

typedef struct

{

char name[20]; // Информация

void *next; // Указатель на следующий блок

void *prev; // Указатель на предыдущий блок

} LIST2, *pLIST2;

 

//////////////////////////////////////////////////////

// Добавить в конец списка новый элемент

pLIST2 AddToLists2(pNAME pInf);

// Добавить в список после заданного элемента

pLIST2 AddToLists2Elem(char* pName, char* pNewName);

// Добавить в список перед заданным элементом

pLIST2 AddToLists2Elem(char* pName, char* pNewName);

// Удалить из списка заданный элемент (первый, если pName==NULL)

pLIST2 DelFromLists2(char* pName);

 

// Вывести содержание списка

void PrintLists2(void);

//////////////////////////////////////////////////////

 

extern pLIST2 pHead;

 

#endif //LISTS2_

 

Кольцевые списки

Если замкнуть связь «вперед» последнего блока на первый блок списка, а связь «назад» первого блока на последний, то получим кольцевой список.

 

 



Дата добавления: 2022-02-05; просмотров: 283;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.