设计算法void reverseOdd(SqQueue &sq) ,对参数所给定的队列sq中的整数进行操作,将其中奇数的顺序进行逆置,偶数的顺序维持不变。用栈
时间: 2024-06-02 08:14:02 浏览: 74
用栈逆置队列
Q)实现将队列Q中所有奇数位置的元素反转的操作。
1. 首先判断队列是否为空,若为空则无需进行任何操作,直接返回。
2. 然后判断队列中元素个数是否为奇数,若为偶数则无需进行任何操作,直接返回。
3. 利用循环,取出队列中奇数位置的元素并存储到一个临时数组中。
4. 反转临时数组中的元素。
5. 再次利用循环,将临时数组中的元素依次插入到队列中奇数位置上,原来在奇数位置上的元素逐个被覆盖。
6. 最后返回反转操作后的队列。
具体实现如下:
void reverseOdd(SqQueue Q)
{
if(isEmpty(Q)) return; //队列为空,无需操作
int count = Q.length;
if(count % 2 == 0) return; //队列元素个数为偶数,无需操作
int temp[count/2]; //临时数组,用于存储奇数位置的元素
int front = Q.front; //队头指针
int rear = Q.rear; //队尾指针
int i = 0, j = 0;
while(front != rear) //取出奇数位置的元素
{
i++;
if(i % 2 != 0) //奇数位置
{
temp[j++] = Q.data[front];
}
front = (front+1) % MAXSIZE; //队头指针后移
}
for(i = 0; i < j/2; i++) //反转临时数组中的元素
{
int t = temp[i];
temp[i] = temp[j-i-1];
temp[j-i-1] = t;
}
front = Q.front;
j = 0;
while(j < count/2) //将反转后的元素插入到队列中奇数位置上
{
front = (front+2) % MAXSIZE; //队头指针后移两个位置
Q.data[front] = temp[j++];
}
return Q; //返回反转操作后的队列
}
阅读全文