/*
将顺序表(数组)某段位置的元素进行翻转
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define maxSize 100
//顺序表结构体定义
typedef struct
{
int data[maxSize];
int length;
}SqList;
//打印顺序表元素
void OutputList(SqList L){
for(int i=0;i<L.length;++i)
{
printf("%d\t",L.data[i]);
}
}
//翻转顺序表
void ReverseList(SqList *L,int left,int right,int n) //L为要操作的顺序表,left为要翻转部分的左端点,right为右端点,n为要翻转的元素个数
{
int temp,i,j;
for(i=left,j=right;i<j&&i<(left+n);++i,--j)
{
temp=L->data[i];
L->data[i]=L->data[j];
L->data[j]=temp;
}
}
int main()
{
//创建顺序表
SqList slist ;
slist.length=0;
//为顺序表赋值
srand(time(0)); //随机数的种子(时间)
for(int i=0;i<10;++i)
{
slist.data[i]=rand()%50; //每次生成随机数赋值 (随机数范围0-49)
slist.length++;
}
//打印顺序表
printf("翻转前顺序表的值为:");
OutputList(slist);
//将顺序表翻转
ReverseList(&slist,1,4,4); //翻转下标1-4元素
//打印顺序表
printf("\n");
printf("第一次翻转后顺序表为:");
OutputList(slist);
ReverseList(&slist,6,8,3); //翻转下标6-8元素
//打印顺序表
printf("\n");
printf("第二次翻转后顺序表为:");
OutputList(slist);
return 0;
}
运行截图:
PS:
顺序表的定义除了上述代码中的结构体方法,还有一种简便的:
//顺序表定义(其实就是定义一个数组+数组中元素的个数)
int A[maxSize];
int length=0;
//翻转顺序表函数
void ReverseList(int a[],int left,int right,int k) //L为要操作的顺序表,left为要翻转部分的左端点,right为右端点,n为要翻转的元素个数
{
int temp,i,j;
for(i=left,j=right;i<j&&i<(left+k);++i,--j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
//调用翻转函数对A进行操作 (顺序表A中已经赋给元素)
ReverseList(A,6,8,3);