循环队列(链表、数组)

 循环队列


图示为理想结构:

数组形式的循环队列实际上仍是同普通数组 一样的结构。只不过是运用%运算,进行了逻辑上的循环。 

链式的循环队列,其实就是循环链表,只不过是只能在队头进行操作(队头入、出队)。

循序队列实际存储大小会比maxSize小1


记录数组形式实现:

#define Cirque_Size 20
typedef int elemType;
class Cirque {
public:
	elemType* elements;
	int head;		// 头
	int tail;		// 尾
	int maxSize;	// 队列大小
public:

	bool Push(elemType e);	// 入队		
	bool Pop();				// 出队
	elemType getfront();	// 获取队头元素
	bool Is_empty();		// 是否空
	bool Is_full();			// 是否满
	Cirque(int size = Cirque_Size) :head(0), tail(0), maxSize(size) {
		elements = new elemType[maxSize];
	}
};

 是否为空

// 是否为空
bool Cirque::Is_empty() {
	if (head == tail) {
		return true;
	}
	return false;
}

是否为满

// 是否满
bool Cirque::Is_full() {
	if ((tail + 1) % maxSize == head) {
		return true;
	}
	return false;
}

入队

// 入队
bool Cirque::Push(elemType e) {
	// 队列已满(实际上会浪费一个内存空间)
	if (this->Is_full()) {
		return false;
	}
	elements[tail] = e;
	tail = (tail + 1) % maxSize;	// 队尾后移
	return true;
}

出队: 

// 出队
bool Cirque::Pop() {
	if (this->Is_empty()) {		// 空
		return false;
	}
	head = (head + 1) % maxSize;	// 队头后移
	return true;
}

获取队头元素: 

// 获取队头元素
elemType Cirque::gethead() {
	// 队空抛出断言
	assert(head != tail);
	return elements[head];
}

 小结:

 循环队列只不过是收到操作限制循环链表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值