На этом шаге мы рассмотрим построение списка без заглавного звена.
Приведем алгоритм построения однонаправленного списка без заглавного звена с помощью схем "до и после" [1]. В нежеприведенной схеме переменная phead - указатель на первый элемент списка, а t - указатель, содержащий адрес последнего (текущего) элемента списка.
struct node *phead; struct node *t;
Рис.1. Размещение указателей
phead = new (node);
Рис.2. Размещение объекта в куче
t = phead; (*t).value = Элем;
Рис.3. Определение t
(*t).next = new (node);
Рис.4. Добавление нового элемента
t = (*t).next;
Рис.5. t содержит адрес последнего элемента
(*t).next = NULL;
(*t).value = Элем1;
Рис.6. Результат выполнения операций
В результате построен линейный однонаправленный список без заглавного звена, содержащий два узла:
Рис.7. Конечный результат
Оформим алгоритм в виде программы на языке C++.
#include<iostream.h> struct node { int value; node *next; }; void main () { int i; node *phead, *t; phead = new (node); t = phead; (*t).value = 1; (*t).next = new (node); t = (*t).next; (*t).value = 2; (*t).next = new (node); t = (*t).next; (*t).value = 6; (*t).next = new (node); t = (*t).next; (*t).value = 17; (*t).next = new (node); (*t).next = NULL; // Вывод содержимого информационных полей списка for (t=phead; t!=NULL; t=(*t).next) cout<<(*t).value << " "; }
На следующем шаге мы рассмотрим построение списка с заглавным звеном.