一 概述
对于顺序表L循环左移p(0<p<L1.length)个位置,即将L中的数据由(X0,X1,...,Xn-1)变换为(Xp,Xp+1,...,Xn-1,x0,x1,...,xp-1)。
二 算法设计思想
该问题可以视为将序列L的(AB)部分转换为序列L的(BA)部分,其中A代表顺序表前p个元素部分,B代表数组中余下的L.length-p个元素部分,先将A部分的元素逆置得到((-B)A),然后将B部分的元素逆置((-A)(-B)),最后将整个表进行逆置得到(BA)。
算法的设计步骤:
- 设计一个逆置函数reverse(SqList L,low,high),初始化一个逆置序列L:1 2 3 4 5 6;
- 对序列L实现循环左移3个位置即(p = 3);
- 实现A部分的逆置即reverse(SqList L,0,2);
- 实现B部分的逆置即reverse(SqList L,3,L.length-1);
- 实现((-A)(-B))逆置得到BA即Reverse(SqList L,o,L.length-1);
注意,顺序表内部实现是数组,数组的下标是从0开始至L.length-1结束,而顺序表数据位是从1开始至L.length结束。
三 算法是实现
#include<iostream>//输入头
using namespace std;//标准输入输出
typedef int Status;
typedef int ElemType;
#define MAXSIZE 100
#define ERROR -1
#define OK 0
typedef struct {
El

最低0.47元/天 解锁文章
846

被折叠的 条评论
为什么被折叠?



