模板设计
首先创建一个模板类queue,这个queue中有保护元素:对应类型元素的指针、记录当前已有多少元素的整形变量count,当queue要插入新的元素时,count自增,直接添加到数组的末尾,删除时,count自减,其对应的指针指向的静态数组删除第一位元素,其余元素均相前移动一位。该类拥有自己的成员函数,用来返回该queue的大小、队首和队尾的元素的值以及判断该队列是否为空。
功能设计
代码
–main.cpp
#include <iostream>
using namespace std;
#define MAXSIZE 1000
#include "myqueue.h"
int main()
{
queue <int > que;
cout<<"将 1 入队"<<endl;
que.push(1);
cout<<"将 2 入队"<<endl;
que.push(2);
cout<<"将 3 入队"<<endl;
que.push(3);
int a = que.front();
cout << "队首元素是:"<< a << endl;
a = que.back();
cout << "队尾元素是:"<< a << endl;
cout<< "队列的大小:"<< que.size() <<endl;
cout<<"删除队列首元素"<<endl;
que.pop();
a = que.front();
cout << "队首元素是:"<< a << endl;
a = que.back();
cout << "队尾元素是:"<< a << endl;
cout<< "队列的大小:"<< que.size() <<endl;
cout<<"队列为空嘛?0表示空,1 相反,结果为:"<<que.empty()<<endl;
return 0;
}
/*
q.empty()// 如果队列为空返回true,否则返回false
q.size() // 返回队列中元素的个数
q.pop() //删除队列首元素但不返回其值
q.front() // 返回队首元素的值,但不删除该元素
q.push(X) //在队尾压入新元素 ,X为要压入的元素
q.back() //返回队列尾元素的值,但不删除该元素
*/
myqueue.h
#include <iostream>
using namespace std;
#define MAXSIZE 1000
template <typename T >
class queue
{
protected:
T* data;
int count;
public:
queue(){
data = new T[MAXSIZE];
count = 0;
}
~ queue(){ delete [] data; }
int size(){
return count;
}
void push(T a)
{
data[ count++ ] = a;
}
void pop()
{
if ( count == 0 ) ;
for(int i=0;i<count-1;i++) data[i] = data[i+1];
count--;
}
T back()
{
if ( count == 0 ) ;
T a = data[ count - 1 ];
return a;
}
T front()
{
if ( count == 0 ) ;
T a = data[ 0 ];
return a;
}
bool empty()
{
if ( count == 0 ) return false;
return true;
}
};