void reverse(int a[],int left,int right,int k){
int temp;
for(int i=left,j=right;i<left+k && i<j;i++,j--){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
void moveToEnd(int a[],int n,int k){
reverse(a,0,k-1,k);
reverse(a,0,n-1,k);
}
(2)顺序表的元素逆置:
#define MaxSize 10
typedef struct{
int data[MaxSize]; //存放数据元素
int length; //顺序表的长度
}SqList;
void reverse(SqList &L){
int i,j,temp;
for(int i=0,j=L.length-1;i<j;i++,j--){
temp=L.data[i];
L.data[i]=L.data[j];
L.data[j]=temp;
}
}
(3)顺序表求最大值:
int max=a[0];
int maxIdx=0;
for(int i=0;i<n;i++){
if(max<a[i]){
max=a[i];
maxIdx=i;
}
}
(4)设计一个算法,从一给定的顺序表L中删除下标i-j(i<j,包括i,j)的所有元素
#define MaxSize 10
typedef struct{
int data[MaxSize]; //存放数据元素
int length; //顺序表的长度
}SqList;
void deleteRange(SqList &L,int i,int j){
assert(i>=0 && j>=0 && i<L.length && j<L.length);
int k,delta;
delta = j-i+1;
for(k=j+1;k<L.length;k++){ //用j+1后面的元素覆盖往前第j-i+1个元素
L.data[k-delta] = L.data[k];
}
L.length-=delta;
}
(5)顺序表归并:
#define MaxSize 10
typedef struct{
int data[MaxSize]; //存放数据元素
int length; //顺序表的长度
}SqList;
void mergearray(SqList A,int m,SqList B,int n,SqList &C){
int i = 0, j = 0;
int k = 0;
while(i<m && j<n){
if(A.data[i] < B.data[j]){
C.data[k] = A.data[i];
k++;i++;
}
else{
C.data[k] = B.data[j];
k++;j++;
}
}
while(i<m){
C.data[k] = A.data[i];
k++;i++;
}
while(j<n){
C.data[k] = B.data[j];
k++;j++;
}
}