数据结构实现 1.3:数组队列(C++版)

1. 概念及基本框架

队列 可以看做一种特殊的 数组 ,所以我使用第一节实现的 动态数组 来实现队列这种数据结构。当然,队列也可以通过其他方式来实现。因为该队列是通过动态数组实现的,所以称之为 数组队列
数组队列

队列的结构如上图所示,可知队列的基本特性如下:
1.队列队头队尾 两端。
2.入队 操作只能从 队尾 进行,出队 操作只能从 队头 进行。
3.先 入队 的先 出队 ,即 先进先出(First In First Out),FIFO
还有一个隐含特性,队列可以自行 扩容(缩容),而不需要用户关心,很显然,动态数组已经满足了这个要求。
由此可见,队列的操作并不多,我使用了一个由 纯虚函数 构成的 抽象类 作为一个接口来定义这些操作。具体代码如下:

template <class T>
class Queue{
   
public:
	virtual int size() = 0;
	virtual bool isEmpty() = 0;
	virtual void print() = 0;
	//入队操作
	virtual void enqueue(T num) = 0;
	//出队操作
	virtual void dequeue() = 0;
	//获得队首元素
	virtual T front() = 0;
};

下面只需要通过继承 抽象类,并且重写 纯虚函数 ,就可以完成 数组队列 的实现。数组队列类的框架如下:

template <class T>
class ArrayQueue : public Queue<T>{
   
public:
	ArrayQueue(int len = initialLen){
   
		Array<T> *p = new Array<T>(len);
		arr = p;
	}
	...
private:
	Array<T> *arr;
};

这个类内部定义一个动态数组类对象,为了保护数据,把它放在 private 部分,构造函数 ArrayQueue 底层调用的就是 Array 的构造函数。用户在构造函数中也可以指定队列的大小。(默认是10)为了兼容更多类型,这里使用了泛型的概念。

2. 基本操作程序实现

2.1 入队操作

template <class T>
class ArrayQueue : public Queue<T>{
   
public:
	...
	//入队操作
	void enqueue(T num){
   
		arr->addLast(num);
	}
	...
};

入队操作使用了动态数组的增加第一个元素的操作来实现。这里动态数组内部已经提供了扩容操作。

2.2 出队操作

template <class T>
class ArrayQueue : public Queue<T>{
   
public:
	...
	//出队操作
	void dequeue(){
   
		arr->removeFirst();
	}
	...
};

出队操作使用了动态数组的删除第一个元素的操作来实现。这里动态数组内部已经提供了缩容操作。

2.3 查找操作

template <class T>
class ArrayQueue : public Queue<T>{
   
public:
	...
	//获得队首元素
	T front(){
   
		return arr->get(0);
	}
	...
};

因为队列只能获得队首元素,所以这里的查找操作也非常简单。

2.4 其他操作

template <class T>
class ArrayQueue : public Queue<T>{
   
public:
	...
	int size(){
   
		return arr
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值