【版权声明:转载请保留出处:blog.csdn.net/algorithm_only。邮箱:liuy0711@foxmail.com】
1. 算法要求
设将n(n>1)个整数存放到一维数组R中,试设计一个在时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移P(0﹤P﹤n)个位置,即将R中的数据由(X0 X1 ……Xn-1)变换为(Xp Xp+1 ……Xn-1 X0 X1 ……Xp-1)。
2. 算法思想
考虑使用队列来实现,将队列前面p个元素依次出队列,再从队尾部依次进队列,即可实现该算法。使用数据结构:
typedef struct qnode{
elemtype *base;
int front;
int rear;
}sqqueue;
3. 算法实现
int in_sqqueue(sqqueue *sq, elemtype e)
{
if ((sq->rear + 1) % MAXQSIZE == sq->front)
return ERROR;
sq->base[sq->rear] = e;
sq->rear = (sq->rear + 1) % MAXQSIZE;
return OK;
}
int out_sqqueue(sqqueue *sq, elemtype *e)
{
if (sq->front == sq->rear)
return NULL_QUEUE;
*e = sq->base[sq->front];
sq->front = (sq->front + 1) % MAXQSIZE;
return OK;
}
void circle_left_shift_queue(sqqueue *sq, int n)
{
int i;
elemtype e;
for (i=0; i<n; ++i) {
out_sqqueue(sq, &e); /* 从队头出队 */
in_sqqueue(sq, e); /* 再从队尾进队 */
}
}
算法实现源码:
http://download.csdn.net/detail/algorithm_only/3892452