您的位置:首页 > 其它

如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。

2017-01-13 20:15 561 查看
#include <iostream>
using namespace std;

//循环队列(少用一个空间)长度
#define M (8+1)

typedef struct node {
int index;
int nextIndex;
} Node;

Node* init(int front, int len) {
//限制少用一个空间,没有限制少用一个下标,所以front>M-1
if (front > M - 1 || len > M - 1) {
return NULL;
}
Node* nodes = new Node[len];

for (int i = 0, j = front; i < len; ++i, ++j) {
nodes[i].index = j % M;
nodes[i].nextIndex = (j + 1) % M;
}
return nodes;
}

void printDescription(Node* nodes, int len) {
if (nodes) {
for (int i = 0; i < len; ++i) {
cout << "index: " << nodes[i].index << " nextIndex: "
<< nodes[i].nextIndex << endl;
}
/*
*循环队列(少用一个空间)长度计算公式:length = (rear-front+1+M)%M;
*为了判断队列是否空/满情况
*空: front == rear
*满:front == (rear+1)%M
*/
int length = (nodes[len - 1].index - nodes[0].index + 1 + M) % M;
cout << "length: " << length << endl;
} else {
cout << "参数错误!!!" << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐