Queue represented using a Circular Linked List

#include<conio.h>
#include<stdio.h>
#define MAX 10
typedef struct node
{
    int data;
    struct node *next;
}node;
// A circular linked list is referenced through a pointer to the rear node

node * initialise();//
int empty(node *rear);
int full(node *rear);
node * insert(node *rear,int x);
node * Delete(node *rear);
int getfront(node *rear);
void print(node *rear);

void main()
{
    node *rear;
    int x,i,op;
    rear=initialise();
    clrscr();
    do
       {
        printf("\n\n1)Insert\n2)Delete\n3)Print\n4)Quit");
        printf("\nEnter Your Choice:");
        scanf("%d",&op);
        switch(op)
           {
            case 1: printf("\n Enter a value:");
                scanf("%d",&x);
                rear=insert(rear,x);
                break;
            case 2: if(!empty(rear))
                   {
                    x=getfront(rear);
                    printf("\Deleted Data=%d",x);
                    rear=Delete(rear);//remove the front element
                   }
                else
                    printf("\nQueue is empty !!!!");
                break;
            case 3: print(rear);break;
           }
    }while(op!=4);
}

node * initialise()
{
     return(NULL);
}
node *insert(node *rear,int x)
{
    node *p;
    p=(node*)malloc(sizeof(node));
    p->data=x;
    if(rear==NULL)//first node
    {
        p->next=p;
        return p;
    }
    else //insert at the rear end
    {
        p->next=rear->next;
        rear->next=p;
        return(p);
    }
}
node * Delete(node *rear)
{
    node *p;
    p=rear->next;//p points to front node
    if(rear->next==rear)  //deleting the only element
        rear=NULL;
    else
        rear->next=p->next;
    free(p);
    return(rear);
}
int getfront(node *rear)
 {
    return(rear->next->data);
 }

void print(node *rear)
{
    int i;
    node *p;
    if(rear!=NULL)
      {     printf("\n");
        p=rear->next;
        do
          {
            printf("%d  ",p->data);
            p=p->next;
          }while(p!=rear->next);
      }
}

int empty(node *rear)
{
    if(rear==NULL)
        return 1;
    return 0;
}

Post a Comment

0 Comments