线性表中的元素循环左移p个位置问题

一 概述

对于顺序表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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值