循环队列sq中,用数组elem[0··25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为18,为什么
时间: 2024-04-01 21:37:21 浏览: 118
根据循环队列的定义,队列的长度为队尾指针(sq.rear)减去队头指针(sq.front)再加上1,即:
length = (sq.rear - sq.front + 1 + MAXSIZE) % MAXSIZE
其中,MAXSIZE为数组elem的大小,由于循环队列是环形的,所以需要对MAXSIZE取模。
根据题目中的数据,当前sq.front为20,sq.rear为12,MAXSIZE为26(数组elem的大小为26),则队列长度为:
length = (12 - 20 + 1 + 26) % 26 = 18
所以当前队列中的元素个数为18。
相关问题
循环队列sq中,用数组elem[0··25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为多少,为什么
根据循环队列的定义,队列的长度为队尾指针(sq.rear)减去队头指针(sq.front)再加上1,即:
length = (sq.rear - sq.front + MAXSIZE) % MAXSIZE + 1
其中,MAXSIZE为数组elem的大小,由于循环队列是环形的,所以需要对MAXSIZE取模。
根据题目中的数据,当前sq.front为20,sq.rear为12,MAXSIZE为26(数组elem的大小为26),则队列长度为:
length = (12 - 20 + 26) % 26 + 1 = 19
所以当前队列中的元素个数为19。
设一维数组elem[maxSize]存放循环队列的元素,同时以rear和length分别指示循环队列中的队尾位置和队列中所含元素的个数。试给出该循环队列的队空条件和队满条件,并写出相应的插入(EnQueue)和删除(DeQueue)元素的操作。
队空条件:当rear == length 时,队列为空。
队满条件:当rear == (length + 1) % maxSize 时,队列已满。
插入元素操作(EnQueue):
1. 判断队列是否已满,若已满则提示“队列已满,不能插入元素”并退出操作。
2. 将新元素插入到队尾rear所在的位置。
3. 将rear的值加一,若rear超过了数组大小maxSize,则将其置为0。
4. 将队列中元素个数length加一。
删除元素操作(DeQueue):
1. 判断队列是否为空,若为空则提示“队列为空,不能删除元素”并退出操作。
2. 取出队头元素elem[front]。
3. 将front的值加一,若front超过了数组大小maxSize,则将其置为0。
4. 将队列中元素个数length减一。
C++实现:
// 声明数组及变量
const int maxSize = 100;
int elem[maxSize];
int rear = 0; // 队尾指针
int length = 0; // 队列中元素个数
// 队空判断
bool isEmpty() {
return rear == length;
}
// 队满判断
bool isFull() {
return rear == (length + 1) % maxSize;
}
// 入队操作
void EnQueue(int value) {
if (isFull()) {
cout << "队列已满,不能插入元素" << endl;
return;
}
elem[rear] = value;
rear = (rear + 1) % maxSize;
length++;
}
// 出队操作
int DeQueue() {
if (isEmpty()) {
cout << "队列为空,不能删除元素" << endl;
return -1;
}
int value = elem[(rear - length + maxSize) % maxSize];
length--;
return value;
}
阅读全文