Pages

Custom Search

Friday, November 4, 2011

Program to implement dynamically allocated Queue using linked list.



 #include <stdio.h>  
 #include <stdlib.h>  
 struct tag  
 {  
     int data;  
     struct tag *link;  
 };  
 typedef struct tag * NODE;  
 void ins_rnode();  
 void del_fnode();  
 void display();  
 int main()  
 {  
     int ch, element, dnum;  
     NODE front = NULL;  
     NODE rear = NULL;  
     do  
     {  
         printf("\nOPERATIONS ON QUEUE: ");  
         printf("\n1.) INSERT");  
         printf("\n2.) DELETE");  
         printf("\n3.) DISPLAY");  
         printf("\n4.) EXIT");  
         printf("\nEnter your choice: ");  
         scanf("%d", &ch);  
         switch(ch)  
         {  
             case 1: printf("\nEnter element to insert into the queue: ");  
                   scanf("%d", &element);  
                   ins_rnode(&front, &rear, element);  
                   break;  
             case 2: del_fnode(&front);  
                   break;  
             case 3: display(&front);  
                   break;  
             case 4: break;  
             default: printf("\nWrong choice!! Enter choice again.");  
         }  
     }while(ch!=4);  
 }  
 void ins_rnode(NODE *front, NODE *rear, int ele)  
 {  
     NODE newnode, temp;  
     temp = *front;  
     newnode = (NODE)malloc(sizeof(struct tag));  
     if(newnode == NULL)  
     {  
         printf("\nInsufficient memory.");  
         return;  
     }   
     newnode->data = ele;  
     newnode->link = NULL;  
     if(*front == NULL && *rear == NULL)  
     {  
         *front = newnode;  
         *rear = newnode;  
     }  
     else  
     {  
         while(temp->link != NULL)  
         {  
             temp = temp->link;  
         }  
         temp->link = newnode;  
         *rear = newnode;  
     }  
 }  
 void del_fnode(NODE *front)  
 {  
     NODE c;  
     if(*front == NULL)  
     {  
         printf("\nQueue is empty");  
         return;  
     }  
     c = *front;  
     printf("\nDeleted node: %d\n", c->data);  
     *front = c->link;  
     free(c);  
 }  
 void display(NODE *front)  
 {  
     NODE temp;  
     temp = *front;  
     if(*front == NULL)  
     {  
         printf("\nQueue is empty");  
         return;  
     }  
     printf("\nQueue is: ");  
     while(temp != NULL)  
     {  
      printf("%d ", temp->data);  
         temp = temp->link;  
     }  
 }  

Program to implement dynamically allocated Stack using linked list.


 #include <stdio.h>  
 #include <stdlib.h>  
 struct tag  
 {  
     int data;  
     struct tag *link;  
 };  
 typedef struct tag * NODE;  
 void push_node();  
 void pop_node();  
 void display();  
 int main()  
 {  
     int ch, element, dnum;  
     NODE top = NULL;  
     do  
     {  
         printf("\n1.) PUSH");  
         printf("\n2.) POP");  
         printf("\n3.) DISPLAY");  
         printf("\n4.) EXIT");  
         printf("\nEnter your choice: ");  
         scanf("%d", &ch);  
         switch(ch)  
         {  
             case 1: printf("\nEnter element to push: ");  
                   scanf("%d", &element);  
                   push_node(&top, element);  
                   break;  
             case 2: pop_node(&top);  
                   break;  
             case 3: display(top);  
                   break;  
             case 4: break;  
             default: printf("\nWrong choice!! Enter choice again.");  
         }  
     }while(ch!=4);  
 }  
 void push_node(NODE *top, int ele)  
 {  
     NODE newnode, temp;  
     temp = *top;  
     newnode = (NODE)malloc(sizeof(struct tag));  
     if(newnode == NULL)  
     {  
         printf("\nInsufficient memory");  
         return;  
     }  
     newnode->data = ele;  
     if(*top == NULL)  
     {  
         newnode->link = NULL;  
         *top = newnode;  
     }  
     else  
     {  
         newnode->link = *top;  
         *top = newnode;  
     }  
 }  
 void pop_node(NODE *top)  
 {  
     NODE c;  
     if(*top == NULL)  
     {  
         printf("\nStack is empty");  
         return;  
     }  
     c=*top;  
     if(c->link == NULL)  
     {  
         printf("\nPopped node: %d", c->data);  
         free(c);  
         *top = NULL;  
         return;  
     }  
     *top = c->link;  
     printf("\nPopped node: %d", c->data);  
     free(c);  
 }  
 void display(NODE top)  
 {  
     NODE temp;  
     temp = top;  
     if(top == NULL)  
     {  
         printf("\nStack is empty");  
         return;  
     }  
     printf("\nStack is: \n");  
     while(temp != NULL)  
     {  
         printf("\n%d", temp->data);  
         temp = temp->link;  
     }  
 }  

Thursday, November 3, 2011

Program to implement dynamically allocated Queue.


Dynamic allocation of memory is different from the static memory allocation. Static memory allocation is where we allocate more memory than required initially. It may be so that we may use the entire allocated memory or fall short of memory or use less memory and hence in any of the above cases memory is not managed properly.
So the solution for such a problem is the method of allocating memory during run time. There are four functions which help us to allocate, reallocate and deallocate memory as per our needs and requirements during run time. They are:
a.) Malloc    [Allocates a single block of memory]
b.) Calloc    [Allocates a contiguous block of memory initially filled with zero's]
c.) Realloc  [Reallocates memory whenever required, may be more or less]
d.) Free      [Deallocates previously allocated memory]

Source Code: 

 #include <stdio.h>  
 #include <stdlib.h>  
 #define realloc(p,n)             // Macro definition for realloc function  
 void insert();  
 void deleteq();  
 void display();  
 int capacity = 1;  
 int rear = -1;  
 int front = 0;  
 int main()  
 {  
     int *p;  
     int choice, ele;  
     p = (int*)malloc(sizeof(int)); //allocating memory to pointer  
     do  
     {  
         printf("\n\nOperations on stack: \n");  
         printf("\n1.) PUSH");  
         printf("\n2.) POP");  
         printf("\n3.) DISPLAY");  
         printf("\n4.) EXIT");  
         printf("\nEnter your choice: ");  
         scanf("%d", &choice);  
         switch(choice)  
         {  
             case 1: printf("\nEnter an element to push: ");  
                   scanf("%d", &ele);  
                   insert(&p, ele);  
                   break;  
             case 2: deleteq(&p);  
                   break;  
             case 3: display(p);  
                   break;  
             case 4: break;  
             default: printf("\nInvalid choice. Enter again...");  
         }  
     }while(choice!=4);  
     free(p);  
 }  
 void insert(int **p, int ele)  
 {  
     if(rear == capacity-1)  //checking if allocated memory is full  
     {    //if full reallocate memory by doubling capacity size  
         capacity*=2;  
         realloc(p, capacity);  
         printf("\nCapacity increased");  
     }  
     rear++;  
     *(*p+rear) = ele;  //storing value in pointer  
 //   printf("\nCapacity: %d", capacity);   remove comment to understand changes in the capacity values  
 }  
 void deleteq(int **p)  
 {  
     if(front > rear)  
     {  
         printf("\nQueue empty");  
     }  
     else  
     {  
         printf("\nDeleted element: %d", *(*p+front));  
         front++;  
         capacity--;  
         realloc(p, capacity);  
 //       printf("\nCapacity: %d", capacity);   remove comment to understand changes in the capacity values  
     }  
 }  
 void display(int *p)  
 {  
     int i;  
     if(front > rear)  
     {  
         printf("\nQueue is empty");  
     }  
     else  
     {  
         printf("\nContents of Queue are: ");  
         for( i=front ;i<=rear ;i++)  
         {  
             printf("%d  ", *(p+i));  
         }  
     }  
 }  

Program to implement dynamically allocated Stack.

Dynamic allocation of memory is different from the static memory allocation. Static memory allocation is where we allocate more memory than required initially. It may be so that we may use the entire allocated memory or fall short of memory or use less memory and hence in any of the above cases memory is not managed properly.
So the solution for such a problem is the method of allocating memory during run time. There are four functions which help us to allocate, reallocate and deallocate memory as per our needs and requirements during run time. They are:
a.) Malloc    [Allocates a single block of memory]
b.) Calloc    [Allocates a contiguous block of memory initially filled with zero's]
c.) Realloc  [Reallocates memory whenever required, may be more or less]
d.) Free      [Deallocates previously allocated memory]

Source Code: 

 #include <stdio.h>  
 #include <stdlib.h>  
 #define realloc(p,n)           // Macro definition for realloc function  
 void push();  
 void pop();  
 void display();  
 int capacity = 1;  
 int top = -1;  
 int main()  
 {  
     int *p;  
     int choice, ele;  
     p = (int*)malloc(sizeof(int));           //allocating memory to pointer  
     do  
     {  
         printf("\n\nOperations on stack: \n");  
         printf("\n1.) PUSH");  
         printf("\n2.) POP");  
         printf("\n3.) DISPLAY");  
         printf("\n4.) EXIT");  
         printf("\nEnter your choice: ");  
         scanf("%d", &choice);  
         switch(choice)  
         {  
             case 1: printf("\nEnter an element to push: ");  
                   scanf("%d", &ele);  
                   push(&p, ele);  
                   break;  
             case 2: pop(&p);  
                   break;  
             case 3: display(p);  
                   break;  
             case 4: break;  
             default: printf("\nInvalid choice. Enter again...");  
         }  
     }while(choice!=4);  
     free(p);        // Allocated Memory freed  
 }  
 void push(int **p, int ele)  
 {  
     if(top == capacity-1)          //checking if allocated memory is full  
     {                     //if full reallocate memory doubling capacity size  
         capacity*=2;  
         realloc(p, capacity);  
         printf("\nCapacity increased");  
     }  
     top++;  
     *(*p+top) = ele;      //storing value in pointer  
 //    printf("\nCapacity: %d", capacity);  remove comment to understand changes in the capacity values  
 }  
 void pop(int **p)  
 {  
     if(top == -1)  
     {  
         printf("\nStack underflow");  
     }  
     else  
     {  
         printf("\nPopped element: %d", *(*p+top));  
         (top)--;  
         capacity--;  
         realloc(p, capacity);  
 //       printf("\nCapacity: %d", capacity);  remove comment to understand changes in the capacity values  
     }  
 }  
 void display(int *p)  
 {  
     int i;  
     if(top == -1)  
     {  
         printf("\nStack is empty");  
     }  
     else  
     {  
         printf("\nContents of Stack are: \n");  
         for( i=top ;i>=0 ;i--)  
         {  
             printf("\n%d", *(p+i));  
         }  
     }  
 }  
Custom Search