Оформим алгоритм в виде программы.
#include
struct node
{
int value; //Информационный элемент звена списка
node *next; // Указатель на следующее звено списка
};
void main()
{
node *first, *curr;
first = new (node);
curr = first;
(*curr).value = 1;
(*curr).next = new (node);
curr = (*curr).next;
(*curr).value = 2;
(*curr).next = new (node);
curr = (*curr).next;
(*curr).value = 3;
(*curr).next = new (node);
curr = (*curr).next;
(*curr).value = 4;
(*curr).next = new (node);
(*curr).next = NULL;
// Вывод содержимого информационных полей списка
for (curr=first; curr!=NULL; curr=(*curr).next)
cout<<(*curr).value << " ";
}
Формирование линейного двунаправленного списка
Двунаправленный линейный список представляет собой однонаправленный, в котором каждое звено, кроме ссылки на следующее звено, включает ссылку на предыдущее. Для того, чтобы описать двунаправленный список, нам придется изменить нашу структуру, описывающую список. Мы введем дополнительный указатель pred, который будет представлять собой ссылку на предыдущий элемент.
#include
struct node
{
int value; //Информационный элемент звена списка
node *next;// Указатель на следующее звено списка
node *prev //Указатель на предыдущее звено
};
Кроме указателя first, мы введем еще один указатель end, который будет указывать на конечное звено списка. Введем заглавное звено.
void main()
{
int n=0;
node *first, *curr, *end;
first = new (node);
curr = first;
(*curr).value=0;
(*curr).next=NULL;
(*curr).prev=NULL;
end=curr;
В цикле, зададим с клавиатуры несколько элементов списка. При вводе нуля, цикл будет прекращен. Затем, выведем список на экран привычным, нам способом.
cin>>n;
while (n!=0)
{
(*curr).next=new (node);
(*(*curr).next).prev=curr;
curr=(*curr).next;
(*curr).value=n;
(*curr).next=NULL;
end=curr;
cin>>n;
}
for (curr=first; curr!=NULL; curr=(*curr).next)
cout<<(*curr).value << " ";
cout<