头文件 ``` #include ``` 初始化 ``` //queue <类型> 名字; queue a //二维 vectornum[5];//定义可变长二维数组 vector >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::iterator it; //相当于声明了一个迭代器类型的变量it //通俗来说就是声明了一个指针变量 //方式一: vector::iterator it = vi.begin(); for(int i = 0; i < 5; i++) cout << *(it + i) << " "; cout << "\n"; //方式二: vector::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 Loading... 头文件 ``` #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 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏