队列的操作集合

一 循环队列的操作集合

循环队列的存储结构

typedef  struct QNode  *PtrToQNode;
struct QNode{
   ElementType  *Data;
   int  front;
   int rear;
   int MaxSize;
};
typedef   PtrToQNode  Queue; 

队列的创建

Queue CreateQueue (int MaxSize)
{
	Queue Q=(Queue)malloc(sizeof(struct QNode));
    Q->Data=(ElementType*)malloc(MaxSize*sizeof(ElementType));
    Q->front=0;
    Q->rear=0;
    Q->MaxSize=MaxSize;
}

判断队列是否满的操作

bool Isfull(Queue Q)
{
	if((Q->rear+1)%(Q->MaxSize)==Q->front) //在存储时,空出一个存储空间,由front指向。循环队列,且数组的下标从0开始。
	{
		return true;
	}
	else return false;
	
}

入队操作

bool  AddQ(Queue Q,ElementType X)
{
	if(Isfull(Q)){
		printf("队列满了\n");
		return false;
	}
	Q->rear=(Q->rear+1)%Q->MaxSize;
	Q->Data[Q->rear]=X;
	return true;
}

出队操作

 ElementType  DeletQ(Queue  Q)
 {
 	if(Q->fort==Q->rear) return -1;
 	else {
 		Q->front=(Q->front+1)%Q->MaxSize;
 		return Q->Data[Q->front];
	 }

 }

二 链式存储的队列操作

存储结构


typedef  struct Node  *PtrToNode;
struct Node{
   ElementType  Data;
   PtrToNode Next;
   
};
typedef   PtrToNode  Position;
typedef  struct  QNode  *PtrToQNode;
struct QNode{
Position  front,rear;
} 
typedef   PtrToQNode  Queue;

队列的创建(不·带头结点)

Queue CreateQueue (Queue Q)
{
	
	Q->front=(Position) malloc(sizeof (struct Node));
	Q->rear=(Position) malloc(sizeof (struct Node));
	Q->front=NULL;
   Q->rear=NULL;
	return Q;
    
}

入队操作(要考虑是空的队列的情况)

bool  AddQ(Queue  Q,ElementType X)
 {
 	
 	Position temp=(Position) malloc(sizeof(struct Node));
 	temp->Data=x;
 	temp->Next=NULL;
 	if(Q->rear==NULL)
 	{
 	  Q->front=temp;	
 	  Q->rear=temp;
	 }
 	 else {
 	 	Q->rear->Next=temp;
 	 	Q->rear=temp;
	  }
 	  return true;
  } 

出队操作(要考虑只有一个节点的情况)

ElementType Delet(Queue Q)
  {
  	Position temp;
  	if(Q->front==NULL) 
  	{
  		printf("队列空"); 
  		return  -1 ;
	  }
	  else{
	   temp=Q->front;
	   if(Q->front==Q->rear)
	   {
	   	Q->front=Q->rear=NULL;
	   }
	   else {
	   	Q->front=Q->front->Next;
		   int num;
		   num=temp->Data;
		   free(temp);
		   return num; 
	   }
  }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一蓑烟雨荏平生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值