您的位置:首页 > 新闻 > 热点要闻 > 循环队列三种实现方式的基本操作(王道标准)

循环队列三种实现方式的基本操作(王道标准)

2024/12/27 21:44:40 来源:https://blog.csdn.net/Dys_debug/article/details/140160319  浏览:    关键词:循环队列三种实现方式的基本操作(王道标准)

文章目录

  • 牺牲一个存储空间来区分队空和队满
  • 设置size数据成员,表示队列当前长度
  • 设置tag数据成员

牺牲一个存储空间来区分队空和队满

缺点: 有一个单元无法利用

  1. 定义
#define MaxSize 10
typedef struct{ElemType data[MaxSize];int front,rear;
}SqQueue;
  1. 初始化
void InitSqQueue(SqQueue &Q){Q.rear=Q.front=0;
}
  1. 入队
bool EnQueue(SqQueue &Q,ElemType x){if((Q.rear+1)%MaxSize==Q.front)		//当队满return false;Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%MaxSize;return true;
}
  1. 出队
bool DeQueue(SqQueue &Q,ElemType &x){if(Q.front==Q.rear)		//当队空return false;x=Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;return true;
}
  1. 判断队列是否为空
bool QueueEmpty(SqQueue Q){if(Q.rear==Q.front)return true;return false;
}
  1. 获得队头元素
bool GetHead(SqQueue Q,ElemType &x){if(Q.front==Q.rear)return false;x=Q.data[Q.front];return true;
}

设置size数据成员,表示队列当前长度

  1. 定义
#define MaxSize 10
typedef struct{ElemType data[MaxSize];int front,rear;int size;
}SqQueue;
  1. 初始化
void InitSqQueue(SqQueue &Q){Q.rear=Q.front=0;Q.size=0;
}
  1. 入队
bool EnQueue(SqQueue &Q,ElemType x){if(Q.size==MaxSize)return false;Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%MaxSize;Q.size++;
}
  1. 出队
bool DeQueue(SqQueue &Q,ElemType &x){if(Q.Size==0)return false;x=Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;Q.size--;return true;
}
  1. 判断队列是否为空
bool QueueEmpty(SqQueue Q){if(Q.size==0)return true;return false;
}
  1. 获得队头元素
bool GetHead(SqQueue Q,ElemType &x){if(Q.size==0)return false;x=Q.data[Q.front];return true;
}

设置tag数据成员

  1. 定义
#define MaxSize 10
typedef struct{ElemType data[MaxSize];int front,rear;int tag;		//最近进行的是删除-0/插入-1
}SqQueue;
  1. 初始化
void InitSqQueue(SqQueue &Q){Q.rear=Q.front=0;Q.tag=0;
}
  1. 入队
bool EnQueue(SqQueue &Q,ElemType x){if(Q.front==Q.rear&&tag==1)		//若队满return false;Q.data[Q.rear]=x;Q.rear=(Q.rear+1)%MaxSize;Q.size++;
}
  1. 出队
bool DeQueue(SqQueue &Q,ElemType &x){if(Q.front==Q.rear&&tag==0)		//若队空return false;x=Q.data[Q.front];Q.front=(Q.front+1)%MaxSize;Q.size--;return true;
}
  1. 判断队列是否为空
bool QueueEmpty(SqQueue Q){if(Q.front==Q.rear&&tag==0)return true;return false;
}
  1. 获得队头元素
bool GetHead(SqQueue Q,ElemType &x){if(Q.front==Q.rear&&tag==0)return false;x=Q.data[Q.front];return true;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com