STL队列基本操作及含义
| 操作 | 含义 |
|---|---|
| front() | 返回队头元素 |
| back() | 返回队尾元素 |
| pop() | 队头弹出 |
| size() | 返回队列大小 |
| empty() | 判断队列是否为空 |
| swap() | 交换队列元素 |
循环队列
(使用模运算代替单纯的加一)
存储结构
队头队尾指针为int,存放数组的为一个数组
#define MAXQSIZE 100;
typedef struct{
QELemType *base;
int front;
int rear;
}SqQueue;
初始化
步骤:
- 动态申请指定大小的数组
- 首尾指针指向0
Status InitQueue(SqQueue &Q){
Q.base=new QElemType[MAXQSIZE];
if(!Q.base)
exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
求队列长度
int QueueLength(SqQueue Q){
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
入队
步骤:
- 判断是否队满
- 将元素赋给队尾
- 队尾指针加一
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
出队
步骤:
- 判断是否队空
- 队头元素取值
- 队头指针加一
Status DeQueue(SqQueue &Q,QElemType &e){
if(Q.rear==Q.front)
return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
取循环队列的队头元素
步骤:直接返回队头指针对应元素
SElemType GetHead(SqQueue Q){
if(Q.front!=Q.rear)
return Q.base[Q.front];
链队
存储结构
链表点结构+链表节点类型的前后指针
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkNode;
初始化
步骤:
- 创建一个新节点,头尾指针均指向该节点
- 头指针的next指向NULL
Status InitQueue(LinkNode &Q){
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
入队
步骤:
- 创建新节点,对其赋值
- 队列尾指针指向新节点
- 新节点尾队列的尾指针
Status EnQueue(LinkQueue &Q,QElemType e){
p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
出队
步骤:
- 判断队列是否为空
- 保留队头节点用于内存释放
- 头指针指向下一个节点
- 判断出队元素是否为最后一个节点,是则Q.rear=Q.front
Status DeQueue(LinkQueue &Q,QElemType &e){
if(Q.front==Q.rear)
return ERROR;
LinkQueue *p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)//是否为最后一个节点
Q.rear=Q.front;
delete p;
return OK;
取对头元素
步骤:
- 判断是否队空
- 存储队头节点,用于内存释放
- 取队头节点的值赋给e
- 判断出队元素是否为最后一个节点,是则Q.rear=Q.front
Status Dequeue(LinkQueue &Q,QElemType &e){
if(Q.front==Q.rear)
return ERROR;
Queue *p=Q.front->next;
e=Q.front->next->data;
if(Q.rear==p)
Q.front=Q.rear;
delete p;
return OK;
本文详细介绍了STL队列的基本操作,包括front()、back()、pop()、size()、empty()和swap()。同时,讲解了循环队列的存储结构、初始化、队列长度计算、入队、出队以及取队头元素的方法。此外,还展示了链队的实现,包括链队的初始化、入队、出队和取队头元素的操作。这些内容对于理解和使用C++中的队列数据结构至关重要。
1393

被折叠的 条评论
为什么被折叠?



