顺序表的基本操作(2)——逆置操作

任务描述

编写顺序表的逆置操作函数。

相关知识

关于逆置,有一种非常暴力的解决方法,就是单独开辟一个同等大小的顺序表,然后新表从前往后遍历,同时原表从后往前遍历,依次赋值,最后得到的就是逆置后的顺序表。但这种方法的空间复杂度为O(n),所以并不能这么做。

顺序表的就地逆置,只需让顺序表中的数据元素头尾依次交换即可,即交换第一个元素和最后一个元素,第二个和倒数第二个,依此类推,这种方法的空间复杂度为O(1)。

编程要求

根据提示,在编辑器 Begin-End 区间补充代码,完成顺序表的逆置操作函数的定义:

  • void Reverse(SqList *&L); //将顺序表就地逆置

测试说明

将对编写的代码进行如下测试:

代码文件

#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType;
typedef struct
{
	ElemType elem[MaxSize];
   	int length;
} SqList;



/*****顺序表的基本操作*****/
int ListEmpty(SqList *L)
{
	return(L->length==0);
}

void InitList(SqList *&L)
{
	L=(SqList *)malloc(sizeof(SqList));
	L->length=0;
}

int ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
	if (i<1 || i>L->length+1)
		return 0;
	i--;							/*将顺序表位序转化为elem下标*/
	for (j=L->length;j>i;j--)		/*将elem[i]及后面元素后移一个位置*/
		L->elem[j]=L->elem[j-1];
	L->elem[i]=e;
	L->length++;					/*顺序表长度增1*/
	return 1;
}
void DispList(SqList *L)
{
	int i;
	if (ListEmpty(L)) return;
	for (i=0;i<L->length;i++)
		printf("%d ",L->elem[i]);
	printf("\n");
}
void Reverse(SqList *&L)
   {
	for(int i=0;i<L->length/2;i++){
		int m=L->elem[i];
		L->elem[i]=L->elem[L->length-1-i];
		L->elem[L->length-1-i]=m;
	}





	}


int main()               //main() function
{	// 调用对应的函数,完成顺序表的建立,然后进行逆置
    /********** Begin **********/
	SqList *L;
	printf("(1)初始化顺序表L\n");
	InitList(L);
	printf("(2)输入顺序表的长度M:\n");
	scanf("%d",&L->length);
	printf("(3)依次插入M个元素\n");
	for(int i=0;i<L->length;i++){
		scanf("%d",&L->elem[i]);
	}
	printf("(4)输逆置前顺序表:\n");
	DispList(L);
	Reverse(L);
	printf("(5)逆置后顺序表:\n");
	DispList(L);
	/********** End **********/


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值