c++:不使用STL标准模板库,实现双端队列
0.简介
最近一个实验验收要求不调用STL标准模板库(standard template library)用c++或c实现双端队列。那么如果使用标准模板库的话怎么实现呢?只需头文件包含deque,然后在代码中直接定义即可,定义参考 deque< int > Name;(上一篇博客已经提到过)。
不用stl直接实现的话也很简单,没有太多算法上的难度,只是稍微有一点繁琐。
1.怎么写
1.1思路
大概思路:
1.首先建立一个循环队列,采用宏定义定义NUM表示循环队列最多容纳的数据个数,也方便修改
2.根据简单算法类比双端队列的功能实现相应的功能,最终达到不采用stl实现双端队列的要求
1.2代码
下面上代码,
#include<iostream>
#include<stdlib.h>
#include<windows.h>
#include<vector>
#include<iomanip>
#include<stdlib.h>
#include<string>
#include<math.h>
//#include<deque>//deque's headfile
using namespace std;
#define NUM 12 //零号单元不用,为判定双端队列是否已满,规定
// 若front指针==back指针或者front指针在back
//指针后一位是判定为队列已满。因此总体来说实际
//空间为NUM - 2.注意!
#define Elemtype int //可更改元素类型
//--------------循环队列-----------
typedef struct deQueue
{
Elemtype *base;
int front;
int back;
} deQueue;
void init(deQueue &Q)
{
Q.base = (Elemtype *)malloc(sizeof(Elemtype) * NUM);
Q.back = Q.front = 1;//0号不用,判断队列是否满更方便
}
//------------队列功能函数-------------
//这部分算法都很简单,就不详细写了
//队首添加
int push_front(deQueue &Q, int x)
{
if(Q.front < Q.back)
if(Q.front == 1)
if(Q.back == NUM - 1) return 1;//满
else {
Q.front = NUM -