#include <conio.h>
#include <iostream>
#define MAX 10
using namespace std;
void main()
{
/* очистка экрана */
/* описание элемента списка */
struct inv{
/* указатель на предыдущий элемент списка */
inv * prev;
int dig;
/* указатель на последующий элемент списка */
inv * next;
};
/* объявление списка */
inv a[MAX];
/* указатель на первый элемент списка */
inv *start;
/* указатель на последний элемент списка */
inv *last;
/* указатель на текущий элемент списка */
inv *current;
/* ввод элементов списка */
for(int i=0;i<MAX;i++)
cout << "enter element of list #" <<i+1<<"\n"; cin >> a[i].dig;
}
/* для первого элемента предыдущим будет последний, а следующим второй */
a[0].prev=&a[MAX-1];
a[0].next=&a[1];
/* для каждого из элементов между первым и последним предыдущим и последующим будет предыдущий и последующий соответственно */
for(i=1;i<MAX-1;i++)
a[i].prev=&a[i-1];
a[i].next=&a[i+1];
/* для последнего элемента следующим будет первый */
a[MAX-1].prev=&a[MAX-2];
a[MAX-1].next=&a[0];
/* далее идет вывод на экран всех элементов списка начиная с первого и заканчивая последним, а затем наоборот */
start=&a[0];
last=&a[MAX-1];
current=start;
cout << "real list:\n"; for(i=0;i<MAX;i++)
cout << current->dig <<" ";
current=current->next;
cout << "\n";
current=last;
cout << "reversed list:\n";
for(i=MAX;i>0;i--)
current=current->prev;
} cout << "\n"