将顺序表的所有元素逆置

本文介绍了如何不使用额外空间逆置顺序表,通过遍历前半部分元素并与其后半部分对应元素对调来实现。提供了C++实现的详细代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将顺序表的所有元素逆置(要求算法空间复杂度为O(1))

题目要求

关于逆置,有一种非常暴力的解决方法,就是单独开辟一个同等大小的线性表,然后新表从前往后遍历,同时原表从后往前遍历,依次赋值,最后得到的就是逆置后的线性表。
但这种方法的空间复杂度为O(n),所以并不能这么做。而且题目要求的是线性表编程过程中可直接定位的顺序表,所以没必要那么浪费空间,只需让顺序表中的数据元素头尾依次调换即可。

基本思想

从下标为0的元素开始,扫描顺序表L中的前半部分元素,将L.data[i]与L.data[L.length-i-1]对调。

核心代码

这里采用静态分配空间的顺序表

void Reverse(SqList &L)
{
	ElemType temp;//临时空间
	for (int i = 0; i < L.length/2; i++)
	{
		temp = L.data[i];
		L.data[i] = L.data[L.length - i - 1];
		L.data[L.length - i - 1] = temp;
	}
}

完整代码(C++)

//函数功能:
//将顺序表L的所有元素逆置,算法的空间复杂度为O(1)

#include<iostream>
using namespace std;

#define MaxSize 50
typedef int ElemType;
typedef struct{
	ElemType data[MaxSize];
	int length;
}SqList;

void Reverse(SqList &L)
{
	ElemType temp;//临时空间
	for (int i = 0; i < L.length/2; i++)
	{
		temp = L.data[i];
		L.data[i] = L.data[L.length - i - 1];
		L.data[L.length - i - 1] = temp;
	}
}
void printList(SqList L)
{//打印顺序表
	for (int i = 0; i < L.length; i++)
		cout << L.data[i] << "  ";
	cout << endl;
}

void main()
{
	SqList L = { 1, 2, 3, 4, 5, 6 };
	L.length = 6;
	printList(L);
	Reverse(L);
	printList(L);
}
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值