【王道2023考研计算机数据结构复习指导课后代码题】——01.顺序表逆置

本文介绍了如何设计一个在O(1)空间复杂度下逆置顺序表的算法,适用于数据结构与算法的学习,特别是考研复习。通过交换顺序表前后两端的元素,实现了原地逆置,代码实现使用C语言,适用于顺序表长度为偶数和奇数的情况。
摘要由CSDN通过智能技术生成

一【题目类别】

  • 顺序表

二【题目来源】

  • 本题目选自王道2023考研计算机数据结构复习指导18页中二、综合应用题之02题

三【题目描述】

  • 设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为 O ( 1 ) O(1) O(1)

四【解题思路】

  • 可以看到算法要求的时间复杂度为 O ( 1 ) O(1) O(1),所以肯定不能开辟新的空间去操作,只能在原顺序表操作。既然这样,我们只需要扫描顺序表的的前半部分,利用顺序表下标去交换两端对应位置元素即可

五【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为顺序表长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

六【代码实现】

/*王道2023考研计算机数据结构复习指导18页中二、综合应用题之02题*/

/*去除警告*/
#define _CRT_SECURE_NO_WARNINGS

/*引入头文件*/
#include<stdio.h>

/*宏定义顺序表最大长度为50*/
#define MaxSize 50

/*声明定义ElemType为int类型*/
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 - 1 - i];/*交换顺序表两端的元素*/
		L.data[L.length - 1 - i] = temp;
	}
	/*打印逆置后的顺序表*/
	printf("逆置后的顺序表为:");
	for (int i = 0; i < L.length; i++)
	{
		printf("%d ", L.data[i]);
	}
	/*换行*/
	printf("\n");
}

/*主函数*/
int main()
{
	/*数据初始化*/
	SqList L;
	L.length = 0;
	int len;
	printf("请输入顺序表长度(长度应≤50):");
	scanf("%d", &len);
	printf("请输入顺序表元素:");
	for (int i = 0; i < len; i++)
	{
		scanf("%d", &L.data[i]);
		L.length++;
	}
	/*打印初始顺序表*/
	printf("初始顺序表为:");
	for (int i = 0; i < L.length; i++)
	{
		printf("%d ", L.data[i]);
	}
	/*换行*/
	printf("\n");
	/*逆置*/
	Reverse(L);
	/*暂停程序*/
	system("pause");
	/*函数结束*/
	return 0;
}

七【程序测试】

  1. 顺序表长度为偶数
    在这里插入图片描述
  2. 顺序表长度为奇数
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IronmanJay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值