队列的基本操作-数据结构

数据结构-队列的基本操作

#include <stdio.h>
#include <stdlib.h>
#define queuesize 10  //顺序栈分配储存空间
#define null 0
#define ok 1
#define overflow -2
typedef int elemtype;
typedef int status;

typedef struct
{
  elemtype * data;
  int front;
	  int rear;   //队头指针,队尾指针;
}sqqueue;


status  initsqqueue( sqqueue &q)
{
 
  q.data=new elemtype[queuesize];
  if(!q.data) exit(overflow);
  else{
  q.front=q.rear=0;   //初始化
 
  }
  return ok;
}

int queuelength(sqqueue q) //求循环队列长度
{
  return (q.rear-q.front+queuesize)%queuesize;
}



status createquque(sqqueue &q,int a[],int n)  //创建队列赋值为空;
{
  int i;
  q.data=new elemtype[queuesize];
  q.front=0;
  q.rear=0;
  for(i=0;i<n;i++)
  {
	  q.data[q.rear]=a[i-1];
	  q.rear=(q.rear+1)%queuesize;  //队尾指针始终指向下一个元素的空间;
  }
  return ok;
}


int enqueue(sqqueue &q,elemtype x)  //入队操作
{
  if((q.rear+1)%queuesize==q.front)  //判队满
	 { printf("队满,无法入队\n");
  return null;}
  else{
   q.data[q.rear]=x;
   q.rear=(q.rear+1)%queuesize;
   printf("入队成功\n");
   return ok;
  }
}



int dequeue(sqqueue &q,elemtype &x)  //出队运算
{
	if(q.rear==q.front){ printf("队为空,无法出队:\n");
	 return null;
	}
	else{
	  x=q.data[q.front];
	 q.front=(q.front+1)%queuesize;
	 printf("出队成功,出队元素是%d\n",x);
	 return ok;
	}
}

int gethead(sqqueue q) // 取队头元素
{
 if(q.front!=q.rear)
	 return q.data[q.front];
}

 int queuefull( sqqueue q)
 {
  if(q.front=q.rear)
	  return ok;
  else return null;
 }

void display(sqqueue q)  //便利
{
 sqqueue r;
 r.front=q.front;
 if(q.front==q.rear)
 {
	 printf("SqQueue empty!\n"); return;}
   else 
   {
     printf("in order SqQueue:");
	 while(q.rear!=r.front)
	 {
	 printf("%d<-",q.data[r.front]);
	 r.rear=r.front;
	 r.front=(r.front+1)%queuesize;
	 }
	 printf("\n");
	 printf("the position of tail :rear=%d\n",q.data[r.rear]);
	 printf("the position of head :front=%d\n",q.data[q.front]);
   }
 
}

int main()
{
  int select;
  sqqueue head;
  do {
printf("\n frist be use must be initiated !\n");
printf("please choose (0--7):\n");
printf("====================menu==========\n");
printf("        1    initate SqQueue       \n");
printf("        2  create SqQueue  queue is null \n");
printf("        3    qppend SqQueue element\n");
printf("        4    delete SQueue element \n");
printf("        5    is empty SqQueue  !   \n");
printf("        6    gethead element       \n");
printf("        7    display SqQueue       \n");
printf("        8    is full SqQueue       \n");
printf("          0      exit     \n");
printf("\n======================================\n");
scanf("%d",&select);
switch(select)
{
case 1:
	{ system("cls");
	   initsqqueue(head);
	   printf("Sqqueue have been initiated!\n");
	   display(head);
	   break;
	}
case 2:
	{  system("cls");
	  int n=10,a[10];
	//	  printf(" please input n ,this is length:\n");
	  //scanf("%d",&n);
	  for(int i=1;i<=n;i++)  
		  a[i-1]=i;
     createquque(head,a,n);
	  printf("sqqueue have been created!\n");
	  display(head);
	break;

}
case 3:
	{  system("cls");
	int x;
	  printf("input sqqueue value:\n");
	  scanf("%d",&x);
	  enqueue(head,x);
	  display(head);
	  break;
	}
case 4:
	{  system("cls");
		int e,z;
	  z=dequeue(head,e);
	  printf("sqqueue head element %d be deleted!\n",z);
	  display(head);
	  break;
	}
case 5:
	{  system("cls");
	 //if(ququeempty(head)) printf("sqqueue is empty\n");
	  printf("sququeu is not empty\n");
	 display(head);
	 break;
	}
case 6:
	{  system("cls");
		int y;
	  y=gethead(head);
		  printf(" sqqueue head element :%d\n",y);
	  display(head);
	  break;
	}
case 7:
	{  system("cls");
	  display(head);
	  break;
	}
case 8:
	{  system("cls");
	  if(queuefull(head))
	  {
	   printf("sqqueue is full\n");
	  }
	  else 
		  printf(" sqqueue is not full\n");
	  display(head);
	  break;
	}
case 0: exit(0);

}
  }while(select<=8);
}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小徐同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值