头文件

#include <queue>

初始化

//queue <类型> 名字;
queue<int> a

//二维
vector<int>num[5];//定义可变长二维数组
vector<vectot<int> >num;//定义一个行和列均可变的二维数组

//元素访问
//方式一:单个访问,假设num数组中已经有了5个元素
cout << num[4] << "\n";  //输出第五个数据
//一二维可变数组和普通数组的访问方法一样

//方式二:遍历
for(int i = 0; i < num.size(); i++)
    cout << num[i] << " ";//下标范围在[0,num.size()),前开后闭

//方式三:智能指针
for(auto i : num)
    cout << i << " ";

//迭代器访问
vector<int>::iterator it;   
//相当于声明了一个迭代器类型的变量it
//通俗来说就是声明了一个指针变量

//方式一:
vector<int>::iterator it = vi.begin(); 
for(int i = 0; i < 5; i++)
    cout << *(it + i) << " ";
cout << "\n";

//方式二:
vector<int>::iterator it;
for(it = vi.begin(); it != vi.end();it ++)
    cout << *it << " ";
//vi.end()指向尾元素地址的下一个地址

方法函数
知道了如何定义初始化可变数组,下面就需要知道如何添加,删除,修改数据。

相关方法函数如下:

代码 含义
front() 返回队首元素 O(1)
back() 返回队尾元素 O(1)
push() 尾部添加一个元素副本 进队O(1)
pop() 删除第一个元素 出队 O(1)
size() 返回队列中元素个数,返回值类型unsigned int O(1)
empty() 判断是否为空,队列为空,返回true O(1)

模拟

/**************************** 顺序表 实现队列 ****************************/
#define DataType int
#define maxn 100005

struct Queue {
    DataType data[maxn];
    int head, tail;
};

void QueueClear(struct Queue* que) {
    que->head = que->tail = 0;
}
void QueueEnqueue(struct Queue *que, DataType dt) {
    que->data[ que->tail++ ] = dt;
}
void QueueDequeue(struct Queue* que) {
    ++que->head;
}

DataType QueueGetFront(struct Queue* que) {
    return que->data[ que->head ];
}
int QueueGetSize(struct Queue* que) {
    return que->tail - que->head;
}
int QueueIsEmpty(struct Queue* que) {
    return !QueueGetSize(que);
}

/**************************** 顺序表 实现队列 ****************************/
/**************************** 链表 实现队列 ****************************/
typedef int DataType;

struct QueueNode;
struct QueueNode {
    DataType data;
    struct QueueNode *next;
};

struct Queue {
    struct QueueNode *head, *tail;
    int size;
};

void QueueEnqueue(struct Queue *que, DataType dt) {
    struct QueueNode *insertNode = (struct QueueNode *) malloc( sizeof(struct QueueNode) );
    insertNode->data = dt;
    insertNode->next = NULL;
    if(que->tail) {
        que->tail->next = insertNode;
        que->tail = insertNode;
    }else {
        que->head = que->tail = insertNode;
    }
    ++que->size;
}

void QueueDequeue(struct Queue* que) {
    struct QueueNode *temp = que->head;
    que->head = temp->next;
    free(temp);
    --que->size;
    if(que->size == 0) {
        que->tail = NULL;
    } 
}

DataType QueueGetFront(struct Queue* que) {
    return que->head->data;
}
int QueueGetSize(struct Queue* que) {
    return que->size;
}
int QueueIsEmpty(struct Queue* que) {
    return !QueueGetSize(que);
}
void QueueClear(struct Queue* que) {
    que->head = que->tail = NULL;
    que->size = 0;
}

/**************************** 链表 实现队列 ****************************/

原文章:https://blog.csdn.net/qq_50285142/article/details/122304056

Last modification:April 6, 2023
如果觉得我的文章对你有用,请随意赞赏