数据结构——队列

本文最后更新于:5 个月前

概念

具有一定操作约束的线性表。

只能在一端插入,而在另一端删除。

数据插入:入队

数据删除:出队

(先来先出)

循环队列:

art

顺序存储(数组)

1
2
3
4
5
6
#define MaxSize <最大个数>
struct QNode{
ElementType Data[MaxSize];
int rear;
int front;
};

入队列

1
2
3
4
5
6
7
8
9
10
void AddQ(QNode* PtrQ,ElementType item)
{
//求余是判断是否满了,满了从头开始(循环队列)
if((PtrQ->rear+1)%MaxSize == PtrQ->front){
cout << "队列满";
return;
}
PtrQ->rear = (PtrQ->rear+1)%MaxSize;
PtrQ->Data[PtrQ->rear] = item;
}

出队列

1
2
3
4
5
6
7
8
9
10
ElementType DeleteQ(QNode* PtrQ)
{
if(PtrQ->rear==PtrQ->front){
cout << "队列空";
return ERROR;
}else {
PtrQ->front=(PtrQ->front+1)%MaxSiz;
return PtrQ->Data[PtrQ->front];
}
}

链表实现

链表头做删除操作(front)

链表尾做插入操作(rear)

art

1
2
3
4
5
6
7
8
9
struct Node{
ElementType Data;
struct Node *Next;
};
struct QNode{
struct Node *rear;
struct Node *front;
};
QNode *PtrQ;

入队

1
2
3
4
5
6
7
void AddQ(ElementType X,QNode *PtrQ){
NOde *Cell;
Cell=(QNode*)new QNode;
Cell->Data=X;
Cell->Next=NULL;
PtrQ->rear=Cell;
}

出队

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ElementType Delete(QNode* PtrQ){
Node* Cell;
ElementType FrontElem;
if(PtrQ->front==NULL){
cout << "链表为空";
return ERROR;
}
Cell=PtrQ->front;
FrontElem=PtrQ->front->Data;
if(PtrQ->front==PtrQ->rear){
//说明只有一个元素删了后链表为空
PtrQ->front=PtrQ->rear=NULL;
}else {
PtrQ->front=PtrQ->front->Next;
}
delete Cell;
return FrontElem;
}

数据结构——队列
https://changzer.gitee.io/2021/05/16/数据结构——queue/
作者
长泽
发布于
2021年5月16日
许可协议