#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

typedef struct node{
        int data;
        node * next;
        node * prev;
};
int  search (node * root,int data){
     if(root==NULL)
                  return -1;
     node * iter=root;
     if(data==root->data){
                          return 1;                   
     }
     int count = 1;
     while(iter->next != root){
                      if(iter->data==data)
                                          return count;
                      iter=iter->next;   
                      count ++;              
     }
     if(iter->data==data)
          return count;
     return -1; 
}
node * del (node * root,int data){
     if(root==NULL)
                  return NULL;
     node * iter=root;
     if(data==root->data){
                          node * temp = root->next;
                         root->prev->next = root->next;
                         root->next->prev = root->prev;
                         free(root);
                         return temp;                   
     }
     while(iter->next != root){
                      if(iter->data==data)
                                          break;
                      iter=iter->next;                 
     }
     iter->prev->next = iter->next;
     iter->next->prev = iter->prev;
     free(iter);
     return root;
     
}
node * insert(node * root,int data){
     if(root==NULL){
                    root=(node*)malloc(sizeof(node));
                    root->data = data;
                    root->next=root;
                    root->prev=root;
                    return root;               
     }   
     node * iter=root;
     if(data<root->data){
         node * temp = (node*)malloc(sizeof(node));
         temp->data = data;
         temp->next = root;
         temp->prev=root->prev;
         temp->next->prev= temp;
         temp->prev->next = temp;
         return temp;                                
     }
     while  (iter->next!=root){
            if(iter->next->data>data){
                                      break;
            }
            iter=iter->next;       
     }
     node * temp = (node*)malloc(sizeof(node));
     temp->data = data;
     temp->next = iter->next;
     iter->next = temp;
     temp->next->prev= temp;
     temp->prev = iter;
     return root;
     
}
int main(){
    node * root=NULL;
    root=insert(root,10);
    root=insert(root,50);
    root=insert(root,60);
    root=insert(root,15);
    root=insert(root,5);
    root=insert(root,2);
    root=insert(root,17);
    printf("arama : %d\n",search(root,17));
        printf("arama : %d\n",search(root,2));
            printf("arama : %d\n",search(root,60));
                printf("arama : %d\n",search(root,170));
  /*  root=del(root,60);
    root=del(root,50);
    root=del(root,10);
    root=del(root,2);
        root=del(root,5);
        */
    node * iter=root;
    while(iter->next!=root){
                      printf("%d\n",iter->data);
                      iter=iter->next;                  
    }    
    printf("%d\n",iter->data);
    getch();
}







