Sunteți pe pagina 1din 4

/*title:single linked list author: ssj description:basic functions using linked list-single */ #include<stdio.

h> struct node; typedef struct node* list; typedef list pos; static int count; struct node { int data; pos next; pos prev; }; list l; pos p; void create(int size,list l) { int i=1,num;pos tmp; p=l; for(i=1;i<=size;i++) { printf("enter the element"); scanf("%d",&num); tmp=malloc(sizeof(struct node)); tmp->data=num; tmp->next=p->next; tmp->prev=p; p->next=tmp; p=p->next; count++; } //end of for loop } //endof function create int isempty(pos p) { if(p->data==NULL) return 0; else return 1; } //endof isempty void display(list l) { p=l; if(isempty(p)==0) printf("the list is empty"); else{ puts("traversing forward"); while(p->next!=NULL) { printf("%d ",p->next->data);

p=p->next; } puts("\ntraversing backwards"); while(p->prev!=NULL) { printf("%d ",p->data); p=p->prev; } } } //endof display void insert(int key,int position,list l) { pos tmp; position--; int i; p=l; if(count<position) printf("error...list is only %d elements big\n enter the correct value",count); else{for(i=1;i<=position;i++) { p=p->next; } //endof for loop tmp=malloc(sizeof(struct node)); tmp->data=key; tmp->next=p->next; tmp->prev=p; p->next=tmp; if(tmp->next!=NULL) tmp->next->prev=tmp; count++;} } //endof insert void delete(int key,list l) { pos position,tmp; p=l; while(p->next!=NULL && p->next->data!=key) p=p->next; if(p->next==NULL) printf("enter the correct value"); else { tmp=malloc(sizeof(struct node)); tmp=p->next; p->next->prev=p; p->next=tmp->next; free(tmp); count--; }

} //endof delete void element_count(list l) { printf("the no of elements created in list=%d",count); } //endof element_count; void find(int key,list l) { int position=1; p=l->next; while(p!=NULL && p->data!=key) { p=p->next; position++; } if(p==NULL) printf("element not found"); else printf("the element is found in position %d",position); } //endof find main() { struct node* header; header=malloc(sizeof(struct node)); header->data=-500; header->next=NULL; header->prev=NULL; int size,i=1,ch=0,element,position; label: while(i==1){ puts("enter the choice:"); puts("1.creation\n 2.display\n 3.insert\n 4.deletion\n 5.number of elements created\n 6.find"); scanf("%d",&ch); switch(ch) { case 1: printf("enter the size"); scanf("%d",&size); create(size,header); break; case 2: if(header->next==NULL){ puts("error...create a list first"); break;} puts("display"); display(header); break; case 3: if(header->next==NULL){ puts("error...create a list first"); break;} puts("enter element"); scanf("%d",&element); puts("enter position");

scanf("%d",&position); insert(element,position,header); break; case 4: if(header->next==NULL){ puts("error...create a list first"); break;} puts("enter the element to delete"); scanf("%d",&element); delete(element,header); break; case 5: element_count(header); break; case 6: if(header->next==NULL){ puts("error...create a list first"); break;} puts("enter the element"); scanf("%d",&element); find(element,header); break; } //endof switch i++; puts("\npress 1 to menu"); scanf("%d",&i); goto label;} }

S-ar putea să vă placă și