#include <iostream>
using namespace std;
//Описание узла списка.
struct Node {
int d;
Node *next;
Node *prev;
Node():next(NULL),prev(NULL), d(-332215){}
Node(Node* ptr_n, Node *ptr_p , int data): next(ptr_n),prev(ptr_p), d(data) {}
};
//Функции для работы со списком.
//--------------------------------------------------------
Node * Create(int data); //создает список.
int add(Node**const pend , int data); //добавить в конец списка.
int pop(Node**const pbeg); //выборка из начала списка.
//полная выборка.
void Update(Node **const pbeg, Node** const pend ){ while(*pbeg)pop(pbeg); (*pend)=NULL; }
void ShowE(Node *pend); //показать с конца.
void ShowB(Node *pbeg); //показать с начала.
/*выводит в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr);
//--------------------------------------------------------
int main(){
Node *pbeg = NULL; //на начало списка.
Node *pend = NULL; //на конец списка.
int numb;
cout<<"Input numb\t"; cin>>numb;
pend = Create(numb); //создаем список.
pbeg = pend;
int i = 0;
while(i<10){
cout<<"Input numb\t"; cin>>numb;
add(&pend,numb);
i++;
}
Show(pend);
Show(pbeg);
Update(&pbeg,&pend);
return 0;
}
//создает список.
Node * Create(int data){ Node *pv = new Node(NULL,NULL,data); ; return pv; }
//добавить в конец списка.
int add(Node**const pend , int data){
Node *pv = new Node(NULL,*pend,data);
(*pend)->next = pv;
(*pend) = pv;
return 0;
}
//выборка из начала списка.
int pop(Node**const pbeg){
Node *tmp = (*pbeg);
if(tmp){
int d = tmp->d;
(*pbeg)=(*pbeg)->next;
delete tmp;
return d;
}
return -1;
}
//показать с конца.
void ShowE(Node *pend){ while(pend){ cout<<pend->d<<' '; pend = pend->prev; } cout<<endl; }
//показать с начала.
void ShowB(Node *pbeg){ while(pbeg){ cout<<pbeg->d<<' '; pbeg = pbeg->next; } cout<<endl; }
/*выводить в зависимости от того: какой указатель передан: на конец или начало. для кольцевых не работает. */
void Show(Node *ptr){
if(ptr){
if((ptr->next==NULL)&&(ptr->prev==NULL)) {while(ptr){ cout<<ptr->d<<' '; ptr=ptr->prev; } cout<<endl; return; }
//Выводим список с конца. если:
if((ptr->next == NULL)&&(ptr->prev!=NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->prev; } cout<<endl; return; }
//Выводим сначала если
if((ptr->next != NULL)&&(ptr->prev==NULL)){ while(ptr){ cout<<ptr->d<<' '; ptr=ptr->next; } cout<<endl; return; }
return ;
}
}