顺序表的循环右(左)移
我们经常能在算法题中看到如下题:
一:在一维数组中A[m+n],依次存放(a1, a2, …, an)和(b1, b2, …, bn),写个函数把它俩位置互换为(b1, b2, …, bn),(a1, a2, …, an)
二:将n (n > 1) 个整数存放到一维数组R中,将R中保存的序列循环左移p (0 < p < n) 个位置(2010年考研真题)
这两个题目其实本质上是相同的,都是对整个数组的循环左移或右移。
注:数组和顺序表的概念类似但是不相同,数组是逻辑结构,顺序表是线性表采用顺序存储方式实现的,而顺序存储方式是物理存储方式,所以二者不能混淆,即顺序表指的是连续存放在内存中的线性表,数组是内存中一串连续内存的名字。
其实我们平常思考很自然会有两种算法:
一:时间复杂度为O(n),空间复杂度为O(n)
即采取一个辅助数组,将原数组中前p个存入数组后p个位置中,然后将原数组中的后n-p个元素存入前n-p个位置中,这样实现了左移或右移,当然,也可以选择保存前p个元素,将原数组中后n-p个元素前移,最后将前p个元素保存回原数组的后p个位置中。时间复杂度和空间复杂度相同
二&#