/ Published in: C
Expand |
Embed | Plain Text
#include <stdio.h> #include <stdlib.h> #include <iostream> #include<conio.h> struct ListCell{ int info; ListCell *urmatorul; ListCell *anterior; }; ListCell *begin,*end; int cSize; void init(); void afisare(); void delElem(int); void delEnd(); void delBegin(); int append(int); int addBegin(int); int addEnd(int); int insert(int,int); int isEmpty(); int main(){ int info,optiune,index; init(); while(optiune>0){ scanf("%d",&optiune); switch(optiune){ case 0:{ optiune=0; break; } default:{ break; } case 1:{ scanf("%d",&info); if(addBegin(info)){ }else{ } break; } case 2:{ afisare(); break; } case 3:{ scanf("%d",&info); if(append(info)){ }else{ } break; } case 4:{ scanf("%d",&info); scanf("%d",&index); if(insert(info,index)){ }else{ } break; } case 5:{ init(); break; } case 6:{ delBegin(); break; } case 7:{ delEnd(); break; } case 8:{ scanf("%d",&info); delElem(info); break; } } } //getch(); return 0; } void init(){ begin=NULL; end=NULL; cSize=0; } int isEmpty(){ if(begin==end && end==NULL){ return 0; }else{ return 1; } } int insert(int info,int index){ ListCell *aux=new ListCell; if(aux==NULL){ return 0; }else{ aux->info=info; ListCell *buf; buf=begin; int i=1; while(buf!=NULL && i<index){ buf=buf->urmatorul; i++; } if(buf!=NULL){ aux->anterior=buf; aux->urmatorul=buf->urmatorul; buf->urmatorul->anterior=aux; buf->urmatorul=aux; return 1; } } } int addBegin(int info){ ListCell *aux=new ListCell; if(aux==NULL){ return 0; }else{ if(begin!=NULL){ aux->info=info; aux->urmatorul=begin; begin->anterior=aux; aux->anterior=NULL; begin=aux; }else{ aux->info=info; aux->urmatorul=NULL; aux->anterior=NULL; begin=aux; end=begin; } cSize++; return 1; } } void afisare(){ ListCell *contor=begin; while(contor!=NULL){ contor=contor->urmatorul; } } int append(int info){ ListCell *aux=new ListCell; aux->urmatorul=NULL; if(aux==NULL){ return 0; } aux->info=info; if(end==NULL){ end=begin=aux; } else{ end->urmatorul=aux; aux->anterior=end; end=aux; cSize++; } return 1; } void delBegin(){ if(begin!=NULL){ ListCell *aux=begin->urmatorul; delete begin; begin=aux; if(aux!=NULL){ begin->anterior=NULL; cSize--; }else{ cSize=0; begin=end=NULL; } }else{ init(); } } void delEnd(){ ListCell *aux=end; if(aux==NULL){ begin=end=NULL; }else{ end=aux->anterior; delete aux; if(end!=NULL){ end->urmatorul=NULL; cSize--; }else{ init(); } } } void delElem(int info){ ListCell *aux=begin; while(aux!=NULL && aux->info!=info && aux->urmatorul!=NULL){ aux=aux->urmatorul; } if(aux!=NULL){ if (aux == end){ delEnd(); cSize=0; }else{ aux->anterior->urmatorul=aux->urmatorul; aux->urmatorul->anterior=aux->anterior; delete aux; cSize--; } }else{ init(); } }
You need to login to post a comment.
