循环队列sq中,用数组elem[0··25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为18,为什么
时间: 2024-04-01 12:37:21 浏览: 126
根据循环队列的定义,队列的长度为队尾指针(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。
相关问题
设一维数组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;
}
改进的循环队列存储结构:只设队头指针 front,不设队尾指针 rear;设置计数器 count 用以记录队列中结点的个数。改进结构如下: #define QUEUE_MAX_SIZE 10 typedef struct { ElemType *elem; int front; int count; } SqQueue; (1)InitQueue_Sq:初始化循环队列; (2)CreateQueue_Sq:创建循环队列;(如果创建失败,则给出 "Overflow! Failed to CreateQueue_Sq!" 信息) (3)GetHead_Sq:取队头元素;(如果队列空,则给出 "Queue empty! GetHead_Sq error!" 的信息) (3)EnQueue_Sq:入队;(如果队列满,则给出 "Queue full! EnQueue_Sq error!" 信息) (4)DeQueue_Sq:出队;(如果队列空,则给出 "Queue empty! DeQueue_Sq error!" 的信息) (5)TraverseQueue_Sq:输出队列元素。
这种改进的循环队列存储结构只使用了一个队头指针 front,而没有使用队尾指针 rear。取而代之的是,设置了一个计数器 count 用来记录队列中结点的个数。这样做的优点是可以省略一个指针的空间,减少了存储开销。但是,这种结构的缺点是在插入和删除操作时,需要额外的时间来更新计数器,因此操作的时间复杂度略微增加。
阅读全文