目录
point
ROL和ROR
代码
/**
* 用顺序表实现 王道P18 T10
*
* ①算法思想:
* 将 0 与 p - 1 之间的元素逆置(包括 0 与 p - 1 ),再将 p 与 n - 1 之间的元素逆置(包括 p 与 n - 1),
* 然后将整个线性表逆置。
*
* ②数据结构:
* typedef struct{
* int data[MaxSize];
* int length;
* }SqList;
*
* ③算法设计
* 时间复杂度:O ( n )
* 空间复杂度:O ( 1 )
*/
#include <stdio.h>
#define MaxSize 100
typedef struct{
int data[MaxSize];
int length;
}SqList;
void reverse(SqList &L,int start,int end){
int i,k = 0;
for (int i = start; i < (start + end) / 2 + 1 - start; i++) {
int t = L.data[i];
L.data[i] = L.data[end - k];
L.data[end - k] = t;
k++;
}
}
void ROLP(SqList &A,int p,int q){//p代表循环左移p个位置,q代表数组最后一个元素的下标
reverse(A,0,p - 1);
reverse(A,p,q);
reverse(A,0,q);
}
//以下用于测试
void InitList(SqList &L){
for (int i = 0; i < MaxSize; ++i) {
L.data[i] = 0;
}
L.length = 0;
}
void PrintList(SqList L){
for (int i = 0; i < L.length; ++i) {
printf("%d ",L.data[i]);
}
printf("\n");
}
int main(){
SqList A = {{1,2,3,4,5,6,7,8}, 8};
PrintList(A);
ROLP(A,3,7);
PrintList(A);
return 0;
}