⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2qa.c

📁 queues implementation
💻 C
字号:
//To perform operations on two queues using single array depending on user's choice.

#include<stdio.h>
int n;
typedef struct
      {
	    int front1,rear1,front2,rear2;
	    int ele[10];
      }queue;
      queue q;
      int fullqueue(queue *);
      void insert(queue *,int,int);
      int delete(queue *,int);
      int emptyqueue(queue *);
      int queuesize(queue *);

void main()
{
      int num,ch,qs,cho;
      char c;
      clrscr();
      printf("ENTER THE CAPACITY OF THE QUEUE\n");
      scanf("%d",&n);
      q.front1=q.rear1=-1;
      q.rear2=q.front2=n;
      do
      {
      printf("------------OPERATIONS ON THE QUEUE----------\n");
      printf("1-----INSERTION\n");
      printf("2-----DELETION\n");
      printf("3-----PEEP\n");
      printf("4-----QUEUESIZE\n");
      printf("5-----EXIT\n");
      printf("WHICH OPERATION WOULD U LYK TO PRFORM ON QUEUE ?\n");
      scanf("%d",&ch);
      switch(ch)
      {

	    case 1:
		    printf("*****INSERT AN ELEMENT IN THE QUEUE*****\n");
		    if(fullqueue(&q))
			 printf("THE QUEUE IS FULL....\n");
		    else
		    {
			 printf("1----INSERTION AT END\n");
			 printf("2----INSERTION AT BEGINNING\n");
			 printf("ENTER YOUR CHOICE\n");
			 scanf("%d",&cho);
			 printf("ENTER ANY ELEMENT\n");
			 scanf("%d",&num);
			 insert(&q,num,cho);
		    }
		    break;

	    case 2:
		    printf("*****DELETE AN ELEMENT*****\n");
		    if(emptyqueue(&q))
			printf("QUEUE IS EMPTY\n");
		    else
		    {
			printf("1-----DELETION AT END\n");
			printf("2-----DELETION AT BEGINNING\n");
			printf("ENTER YOUR CHOICE\n");
			scanf("%d",&cho);
			num=delete(&q,cho);
			printf("THE DELETED ELEMENT IS %d\n",num);
		    }
			break;

	    case 3:
		    printf("*****PEEP AN ELEMENT IN THE QUEUE*****\n");
		    if(emptyqueue(&q))
			printf("THE QUEUE IS EMPTY\n");
		    else
		    {
			printf("1-----PEEP THE FIRST ELEMENT\n");
			printf("2-----PEEP THE LAST ELEMENT \n");
			printf("ENTER YOUR CHOICE\n");
			scanf("%d",&cho);
			if(cho==1)  //first ele.
			{
			      if(q.rear1!=-1)
				   printf("THE FIRST ELEMENT OF THE QUEUE IS %d\n",q.ele[q.rear1]);
			      else
				   printf("THE FIRST ELEMENT OF THE QUEUE IS %d\n",q.ele[q.front2]);
			}
			if(cho==2)
			{
			      if(q.rear2!=n)
				   printf("THE LAST ELEMENT OF THE QUEUE IS %d\n",q.ele[q. rear2]);
			     else
				   printf("THE LAST ELEMENT OF THE QUEUE IS %d\n",q.ele[q.front1]);
			}
		    }
		    break;
	    case 4:
		    printf("*****SIZE OF THE QUEUE*****\n");
		    qs=queuesize(&q);
		    printf("size of the queue is %d\n",qs);
		    break;
	    case 5:
		    exit();

      }
      printf("DO YOU WANT TO CONTINUE?\n...ENTER y(for yes) or n(for no)\n");
      fflush(stdin);
      scanf("%c",&c);
     }while(c=='y');
}
int fullqueue(queue *q)
{

      if((q->front1==q->front2) && (q->rear1==0 && q->rear2==n-1))
	  return(1);
      else
	  return(0);
}


void insert(queue *q,int num,int cho)
{

      int m;
      if(cho==1)       //insertion at end.
      {
	    if(q->front2==n && q->rear2==n)
	    {
		q->rear2=q->front2=n-1;
		q->ele[q->rear2]=num;
	    }
	    else
		if(q->front2<=q->rear2)
		{
		    q->front2--;
		    q->ele[q->front2]=num;
		 }
       }
       else
       if(cho==2)    //insertion at beginning.
       {
	    if(q->front1==-1 && q->rear1==-1)
	    {
		q->rear1=q->front1=0;
		q->ele[q->front1]=num;
	    }
	    else
		if(q->rear1<q->front1)
		{
		     q->front1++;
		     q->ele[q->front1]=num;
		}
	}
}


int delete(queue* q,int cho)
{

       int num,m;
       if(cho==1)   //deletion at end.
       {
	    if(q->front2==n && q->rear2==n)
		  printf("NO ELEMENT CAN BE DELETED FROM THE END OF THE QUEUE\n");
	    else
	    if((q->rear2==q->front2) && (q->rear2!=n && q->front2!=n))
	    {
		  num=q->ele[q->rear2];
		  q->rear2=q->front2=n;
	    }
	    else
	    if(q->front2<q->rear2)
	    {
		 num=q->ele[q->rear2];
		 m=q->rear2;
		 while(m>q->front2)
		      q->ele[m]=q->ele[m--];
		 q->front2++;
	    }
       }
       else
       if(cho==2)   //deletion at beginning.
       {
	    if(q->front1==-1 && q->rear1==-1)
	    {
		  printf("NO ELEMENT CAN BE DELETED FROM THE FRONT END OF THE QUEUE\n");
	    }
	    else
	    if((q->rear1==q->front1) && (q->rear1!=-1 && q->front1!=-1))
	    {
		  num=q->ele[q->rear1];
		  q->rear1=q->front1=-1;
	    }
	    else
	    if((q->front1>=q->rear1) && (q->rear1!=-1 && q->front1!=-1))
	    {
		num=q->ele[q->rear1];
		m=q->rear1;
		while(m<q->front1)
		    q->ele[m]=q->ele[m++];
		q->front1--;
	    }
       }
       return(num);
}

int emptyqueue(queue *q)
{
    if((q->front1==-1 && q->rear1==-1) && (q->front2==n && q->rear2==n))
	return(1);
    else
	return(0);
}
int queuesize(queue *q)
{
    int qs;
    printf("r1=%d,f1=%d,r2=%d,f2=%d\n",q->rear1,q->front1,q->rear2,q->front2);
    if(emptyqueue(q))
	 qs=0;
    else
	 qs=(q->front1-q->rear1+1)+(q->rear2-q->front2+1);
    return(qs);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -