队列的基本操作c++
时间: 2023-07-23 07:11:00 浏览: 58
队列是一种FIFO(先进先出)的数据结构,它的基本操作包括:
1. 入队(enqueue):在队列的尾部插入一个元素。
2. 出队(dequeue):删除并返回队列的头部元素。
3. 队列是否为空(empty):检查队列是否为空。
4. 队列大小(size):返回队列中元素的个数。
5. 访问队列头部元素(front):返回队列头部的元素,但不删除该元素。
6. 访问队列尾部元素(back):返回队列尾部的元素,但不删除该元素。
在C++中,可以使用STL的queue库来实现队列的基本操作,例如:
```c++
#include <queue>
using namespace std;
int main() {
queue<int> q; // 声明一个整数队列
q.push(1); // 入队
q.push(2);
q.push(3);
q.pop(); // 出队
int front_element = q.front(); // 访问队列头部元素
int back_element = q.back(); // 访问队列尾部元素
bool is_empty = q.empty(); // 检查队列是否为空
int size = q.size(); // 返回队列中元素的个数
return 0;
}
```
以上是队列的基本操作C++实现的示例。
相关问题
链式队列的基本操作c++
链式队列是一种基于链表实现的队列,它的基本操作包括入队和出队。以下是链式队列的基本操作C++代码:
```C++
#include <iostream>
using namespace std;
// 链式队列结点的定义
template <typename T>
struct Node {
T data;
Node<T>* next;
};
// 链式队列的定义
template <typename T>
class LQueue {
public:
LQueue() {
front = rear = new Node<T>;
front->next = NULL;
}
~LQueue() {
while (front) {
rear = front->next;
delete front;
front = rear;
}
}
bool IsEmpty() const {
return front == rear;
}
void EnQueue(const T& x) {
rear->next = new Node<T>;
rear = rear->next;
rear->data = x;
rear->next = NULL;
}
bool DeQueue(T& x) {
if (IsEmpty()) {
return false;
}
Node<T>* p = front->next;
x = p->data;
front->next = p->next;
if (rear == p) {
rear = front;
}
delete p;
return true;
}
private:
Node<T>* front;
Node<T>* rear;
};
// 测试代码
int main() {
LQueue<int> q;
for (int i = 1; i <= 5; ++i) {
q.EnQueue(i);
}
int x;
while (!q.IsEmpty()) {
q.DeQueue(x);
cout << x << " ";
}
cout << endl;
return 0;
}
```
循环队列的基本操作c++
循环队列是一种常见的数据结构,它可以在固定大小的数组中实现队列的基本操作。C++中实现循环队列的基本操作包括:
1.初始化队列:定义一个数组和两个指针front和rear,分别指向队头和队尾,初始时front和rear都指向0。
2.判断队列是否为空:当front和rear相等时,队列为空。
3.判断队列是否已满:当(rear+1)%数组大小等于front时,队列已满。
4.入队操作:将元素插入到rear指向的位置,然后将rear指针向后移动一位。
5.出队操作:将front指向的元素弹出队列,然后将front指针向后移动一位。
6.获取队头元素:返回front指向的元素。
7.获取队列长度:返回rear和front之间的元素个数。
下面是一个示例代码,实现了循环队列的基本操作:
```C++
#include<iostream>
using namespace std;
const int MAXSIZE = 5; //定义队列的最大长度
typedef struct {
int data[MAXSIZE];
int front, rear;
}SqQueue;
//初始化队列
void InitQueue(SqQueue &S) {
S.front = S.rear = 0;
}
//判断队列是否为空
bool IsEmpty(SqQueue S) {
if (S.front == S.rear) {
return true;
}
else {
return false;
}
}
//判断队列是否已满
bool IsFull(SqQueue S) {
if ((S.rear + 1) % MAXSIZE == S.front) {
return true;
}
else {
return false;
}
}
//入队操作
bool InQueue(SqQueue &S, int x) {
if (IsFull(S)) {
return false;
}
else {
S.data[S.rear] = x;
S.rear = (S.rear + 1) % MAXSIZE;
return true;
}
}
//出队操作
bool DeQueue(SqQueue &S, int &x) {
if (IsEmpty(S)) {
return false;
}
else {
x = S.data[S.front];
S.front = (S.front + 1) % MAXSIZE;
return true;
}
}
//获取队头元素
bool GetHead(SqQueue S, int &x) {
if (IsEmpty(S)) {
return false;
}
else {
x = S.data[S.front];
return true;
}
}
//获取队列长度
int GetLen(SqQueue S) {
return (S.rear - S.front + MAXSIZE) % MAXSIZE;
}
//主函数
int main() {
SqQueue S;
InitQueue(S);
int inpute;
for (int i = 0; i < 5; i++) {
cout << "请输入第" << i + 1 << "个数据:";
cin >> inpute;
InQueue(S, inpute);
}
GetLen(S);
int outpute;
for (int j = 0; j < 5; j++) {
DeQueue(S, outpute);
cout << "输出第" << j + 1 << "个元素:" << outpute << endl;
}
return 0;
}
```